就平均查找長度而言,折半(二分)查找最小,分塊查找次之,順序查找最大。
1、順序查找
a、基本概念:
b、對無序線性表順序查找,查找失敗需要遍歷整個線性表。
對有序線性表進行順序查找,查找失敗不需要遍歷整個線性表。(因為在中間如果查找失敗,剩下的部分就不需要再找了)。
c、平均查找長度ASL:
d、判定樹(描述查找過程的二叉排序樹)
e、在有序單鏈表上順序查找和在無序順序表或者有序順序表上做順序查找的平均查找長度相同,都是(n+1)/2。
2、折半查找
a、原理:
b、查找的復雜度與對應的樹的深度(層數)直接相關,折半查找的樹更像是平衡二叉樹,層數低,所以查找效率高。
c、平均查找長度ASL:
d、順序查找適用於順序存儲和鏈式存儲,序列有序無序皆可。
折半查找只適用於順序存儲,而且序列一定有序。
e、折半查找法在查找不成功時的比較次數最多為樹的高度,即⌊log2n⌋+1或者⌈log2(n+1)⌉。
f、折半查找判定樹:
實際上是一顆二叉排序樹,它的中序序列是一個有序序列。
折半查找判定樹的構建方法就是不斷地尋找中間的mid結點,下面以一個例題展示:
g、折半查找(二分查找)的推廣:
k分查找可以用k叉樹來描述,在查找時進行比較的關鍵字的個數不超過樹的深度,具有n個結點的k叉樹深度為⌊logkn⌋+1,所以k分查找時和給定值進行比較的關鍵字個數至多為⌊logkn⌋+1,即時間復雜度為O(logkn),查找不成功同理,進行比較的關鍵字個數也是⌊logkn⌋+1,時間復雜度也是O(logkn)。
3、分塊查找
a、基本概念:
b、平均查找長度ASL: