1.1順序表查詢演算法
在陣列a中檢視有沒有關鍵字(key),從小到大遍歷
int sequential_search(int
*a,int n,int key)
return
0; }
1.2順序表查詢優化
由於順序查詢每次迴圈時,都要判斷i是否越界,所以設定乙個哨兵,解決每次i與n作比較,時間複雜度為o(n)。
/*有哨兵順序查詢*/
int sequential_search(int *a,int n,int key)
return i;
}
2.1二分查詢
前提是線性表中的記錄必須是關鍵碼有序(通常是從小到大)
/*二分查詢*/
int binary_search(int *a,int n,int key)
return 0;
}
2.2 插值查詢
對於表長較長,而關鍵字分布又比較均勻的查詢表來說,插值查詢演算法的平均效能較好。 mi
d=lo
w+hi
gh2=
low+
12(h
igh−
low)
改進方案為:mi
d=lo
w+ke
y−a[
low]
a[hi
gh]−
a[lo
w](h
igh−
low)
所以**第八行更改為
mid = low+(high-low)*(key-a[low])/(a[high]-a[low]);
所以,插值的核心就是插值計算公式:ke
y−a[
low]
a[hi
gh]−
a[lo
w]
2.3 斐波那契查詢
/*斐波那契查詢*/
int fibonacci_search(int *a,int n,int key)
else
if (key>a[mid])
else
} return
0;}
查詢演算法總結
順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...
查詢演算法總結
順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...
查詢演算法總結
一 順序查詢 二 二分查詢 int binarysearchrecursion int arry,int value,int start,int end else int binarysearchrecursion int arry,int len,int value int binarysearc...