查找算法思想
如果查找到相應的數據項,往往需要返回該數據項的地址或者位置信息。這樣。程序中可以通過位置信息來顯示數據項、插入數據項、刪除數據項等操作。
如果沒有查找到相應的數據項,則可以返回相應的提示信息。
在實際應用中,針對不同的情況往往可以選擇不同的查找算法。對於無順序的數據,只有逐個比較數據,才能找到需要的內容,這稱爲順序查找。對於有順序的數據,也可以採用順序查找法逐個比較,但還可以採用更快速的方法來找到所需的數據。另外,對於一些特殊的數據結構,如鏈表、樹結構和圖結構等,其都有對應的查找算法。
順序查找算法思想
從數據序列中的第一個元素開始,從頭到尾依次逐個查找,直到找到所要的數據或搜索完整個數據序列。
順序查找主要針對少量的、無規則的數據。對於包含n個數據的數據序列,使用順序查找方法查找數據,最理想的情況是目標數據位於數組的第一個,這樣比較1次就能找到目標數據。而最差的情況是需比較完所有的n個數據才能找到目標或者確認沒有該數據。平均來說,比較次數爲 n/2 次,其效率比較差。
順序查找算法示例:
int searchFun(int[] a,int x) {
for(int i = 0; i < a.length; i ++) {
if(a[i] == x) {
return i;
}
}
return -1;
}
順序查找算法實例:
public class SearchFun {
// 順序查找算法
private static final int NUM = 10;
public static int searchFun(int[] a,int x) {
for(int i = 0; i < a.length; i ++) {
if(a[i] == x) {
return i;
}
}
return -1;
}
public static void print(int[] a){
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] array = new int[NUM];
for(int i = 0;i < array.length; i++) {
array[i] = (int)(100 + Math.random()*100);
}
System.out.println("***順序查找算法演示***");
System.out.print("數據序列爲:");
print(array);
System.out.print("請輸入要查找的數:");
Scanner sc = new Scanner(System.in);
int target = sc.nextInt();
int index = searchFun(array,target);
if(index == -1){
System.out.printf("沒找到數據:%d%n",target);
}else {
System.out.printf("數據:%d位於數組的第%d個元素處",target,index + 1);
}
}
}
運行代碼結果如下:
***順序查找算法演示***
數據序列爲:116 105 155 134 140 131 139 171 100 108
請輸入要查找的數:140
數據:140位於數組的第5個元素處