折半 二分 查詢

2021-06-16 09:47:34 字數 906 閱讀 2991

《遞迴入門》

假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

折半(二分)查詢也是乙個分而治之策略的完美示例。所以,其可以用遞迴實現也不足為奇。

解法:遞迴

遞迴的作用在於把問題的規模不斷縮少,直到問題縮少到能簡單地解決

由於我們查詢的須是乙個有序表,所以在每一次的比較中,縮少的規模將是上一次查詢規模的一半,可見這效率是相當大

新問題與原問題有著相同的形式

新問題與原問題具有相同的形式,就是查詢某個字元

遞迴的結束需要簡單情景

low >high時,說明查詢失敗

p[mid] == key時,說明查詢成功

遞迴跳躍的信任

由於實現細節較易就能看出,未能突出體現出遞迴跳躍的信任的重要性

#include using namespace std;

int bin_search(int *p, int low, int high, int key)

else }

int main()

cout << bin_search(a, 0, 999, 185) << endl;

return 0;

}

二分查詢(折半查詢)

二分查詢 折半查詢 從有序序列中找到給出的要查詢的數字。原理是 首先把乙個有序序列中間位置的值與要查詢的數比較,若相等則找到了有序序列中的此數 否則比較兩者的大小,若前者大,則把有序序列的中間位置以前的元素都去掉,餘下的元素組成乙個新的有序數列繼續上一步的操作,直到找到為止 若後者大,則把有序數列中...

折半查詢(二分查詢)

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

二分查詢(折半查詢)

時間限制 3000 ms 記憶體限制 65535 kb難度 3描述 在某一國度裡流行著一種遊戲。遊戲規則為 在一堆球中,每個球上都有乙個整數編號i 0 i 100000000 編號可重複,現在說乙個隨機整數k 0 k 100000100 判斷編號為k的球是否在這堆球中 存在為 yes 否則為 no ...