今天我們來**一下二分查詢的易錯點和錯誤情況。首先我們知道二分法查詢適用於有序陣列或者順序表。本文簡單的以有序陣列做例子,依次查詢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 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...