原文出處:http://www.cnblogs.com/yw09041432/p/5908444.html
常用查找算法
1.順序查找
2.二分查找
3.差值查找
4.肥婆那楔查找
5.樹表查找
6.分塊查找
7.哈希查找
查找:根據給定的某個值,在查找表中確定一個其關鍵字等於給定值得數據元素(或記錄)。
查找算法分類:
1.靜態查找和動態查找
動態查找指查找表中有刪除和插入操作的表。
2.無序查找和有序查找
無序查找:被查找數列有序無序均可
有序查找:被查找數列必須有序
1.順序查找
基本思想:順序查找也稱為線性查找,屬於無序查找算法。從線性表的一端開始,順序掃描,依次將掃描到的節點關鍵字與給定值進行比較,若相等則表示查找成功;若
相等表示查找成功;若掃描結束風沒有找到關鍵字等於K的節點,表示查找失敗。
順序查找的時間復雜度為O(n)。
2.二分查找
基本思想:也稱為折半查找,屬於有序查找算法。用給定值K先與中間節點的關鍵字比較,中間節點把線性表分成兩部分;
若相等則查找成功;若不相等,再根據K與該中間節點關鍵字的比較結果確定下一步查找那個子表,這樣遞歸進行,直到
查找結束發現表中沒有這樣的節點。
二分查找算法在 最壞情況下的比較次數是log2(n+1),期望時間復雜度為O(log2n)
注:折半查找的前提條件是需要有序表順序存儲,對於靜態查找表,依次排序后不再變化,折半查找能得到不錯的效率。但對於需要頻繁執行插入或刪除操作的數據集來說,維護有序的排序會帶來不小的工作量,這種情況下就不建議使用折半查找算法了。
3.插值查找
在基於二分查找的分析下,每次的比較節點都是中間位置,mid=(low+high)/2 => mid=low+1/2(high-low);
這樣通過改進可以取相對key值有關聯關系的節點,mid=low+(key-a[low])/(a[high]-a[low])*(high-low);取得的比值會明顯更加接近key所在位置。
基本思想:這樣二分查找算法,將查找點的選擇改進為自適應選擇,可以提高查找效率。同樣的是這個算法的前提也是基於有序序列上面的。
注意:插值算法多適用於關鍵字分布比較均勻的查找表中。
4.斐波那楔查找
基於以上二分查找和插值查找,這個算法是對比較節點一個特殊的情況,通每次將比較的點作為黃金分割點

5.樹表查找
基本思想:二叉查找樹是對待查找的數據進行生成樹,確保樹的左分支的值小於右分支的值,然后再就和每個節點的父節點進行比較,查找最合適的范圍。這個算法的查找效率很高,
但是如果使用這種查找方法要首先創建樹。
二叉查找樹的復雜度為O(logn),但是在最壞的情況下,比如單支樹,結構退化為一個鏈表相應的復雜度為O(n)

