折半查詢及其擴充套件

2021-06-03 21:37:22 字數 759 閱讀 2883

在查詢演算法中,最簡單的方法就是順序查詢,其複雜度為o(n)

另一種很高效的方法就是折半查詢,主要思想為:中間元素與給定查詢元素比較,如果相等則返回該位置,如果大於給定元素則從低半區查詢,如果小於給定元素則從高半區查詢,如此往復,直至查到元素為止。折半查詢的複雜度為o(logn),但使用該方法的前提是在已序的陣列中。程式如下:

int search(int array,int n,int value)

int low=0;

int high=n-1;

while (lowvalue)

else

return med;

} return -1; //查詢失敗返回-1

}

如果陣列中有的元素個數不唯一,想要找出某一元素第一次出現的位置或者最後一次出現的位置,該怎麼實現演算法。類似stl中的low_bound與upper_bound函式,只是stl中的upper_bound函式是查詢最後一次出現的下一位置。

同樣使用高效的折半查詢方法可以快速實現,找某元素第一次出現位置的程式如下:

int lowerbound(int array,int n, int value)

else

}return high;

}

例如輸入陣列array[10]=,呼叫lowbound(array,10,9)與upperbound(array,10,9)輸出結果分別為6和8

查詢 折半查詢

折半查詢 int search keytype key,int n,keytype k return 1 查詢失敗,返回 1 在演算法中,n表示記錄的個數。key表示要查詢的關鍵字。key為關鍵字順序表,每個元素都是對應記錄的關鍵字。例如key 0 為第0個記錄的關鍵字。如果每條記錄的資訊與它的關鍵...

查詢之折半查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...

查詢之折半查詢

折半查詢又稱二分查詢,適用有序的順序表。附 筆試考察查詢,這個是經典查詢法 基本思路 首先給定值key與表中中間位置元素的關鍵字,若相等則查詢成功,返回位置。若不等,則所需查詢的元素只能在中間元素外的前半部分或後半部分中。縮小範圍,遞迴查詢。2.折半查詢的 int binary search seq...