二分法查詢易錯點解析

2021-07-27 14:50:42 字數 1478 閱讀 3298

今天我們來**一下二分查詢的易錯點和錯誤情況。首先我們知道二分法查詢適用於有序陣列或者順序表。本文簡單的以有序陣列做例子,依次查詢0,1,2,3,4,5,6,7,8,9,10是否存在,存在則輸出數字所在的陣列下標值,不存在則輸出-1來表示。

下面我們來梳理一下二分法查詢的邏輯。

舉例說明二分查詢的形式如下所示:

經過測試發現遞迴和非遞迴二分查詢的結果相同,只有當改變二分查詢的指標範圍、迴圈結束條件及指標走向趨勢,才可能會導致錯誤。下面我們來分步改變這三個條件,而其他條件不改變。從而得到可能會出現的錯誤型別。整理如下:

指標範圍

迴圈結束條件

指標走向趨勢 結果

左閉右開[)

left>=right

right=mid

可以得到正確結果

left>=right

right=mid-1

1,4,7找不到

left>right

right=mid

可以得到正確結果

left>right

right=mid-1

可以得到正確結果

左閉右閉

left>right

right=mid-1

可以得到正確結果

left>right

right=mid

可以得到正確結果

left>=right

right=mid-1

0,3,6,9找不到

left>=right

right=mid

存在的9找不到

通過上表可以得出,左閉右開的二分查詢,條件left>=right和right=mid-1不能同時存在;而左閉右閉的二分查詢,迴圈結束的條件不能是left>=right。所以為了避免出錯,不論指標範圍,迴圈條件和指標走向趨勢分別選擇left>right和right=mid即可。

希望能能給大家帶來方便!再會!^_^

附加:給出二分查詢的遞迴和非遞迴的**如下:

int binarysearch(type * a, size_t len, int x)//非遞迴二分法查詢

else if(x < a[mid])

else

}return -1;

} int binarysearch2(type * a, size_t left, size_t right, int x)//遞迴二分法查詢

else if(x < a[mid])

else}}

測試用例**如下示:

int main()

; cout<

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法查詢

前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...