二分法查詢

2021-08-07 13:53:16 字數 1257 閱讀 5112

jon bentley:90%以上的程式設計師無法正確無誤的寫出二分查詢**。

如果你不信,你可以先嘗試著寫一下

好了,接下來仔細看看吧,一定會有你犯下的錯誤:

注意:

二分查詢是針對

排好序的陣列

二分查詢可以解決

「預排序陣列的查詢

」問題:只要陣列中包含t(即要查詢的值),那麼通過不斷縮小包含t的範圍,最終就可以找到它。一開始,範圍覆蓋整個陣列。將陣列的中間項與t進行比較,可以排除一半元素,範圍縮小一半。就這樣反覆比較,反覆縮小範圍,最終就會在陣列中找到t,或者確定原以為t所在的範圍實際為空。對於包含n個元素的表,整個查詢過程大約要經過log

2n次比較。

[cpp]view plain

copy

print?

//二分查詢

//array 陣列,n 陣列長度,value 想要找的值

intbinary_search(

intarray,

intn,

intvalue)    

else

if(array[middle]

else

}  return

-1;  

}  

在編寫程式時有以下幾個要點:

1、

right=n-1 => while(left <= right) => right=middle-1;

right=n   => while(left  right=middle;

2、

middle的計算不能寫在while迴圈外,否則無法得到更新。  

3、

int middle=left + ((right-left)>>1);

這樣寫是為了:

防止溢位

。移位也更高效。同時,每次迴圈都需要更新。

注意,如果你這樣寫:

int middle=(left+right)/2;//n為偶數,取靠左的那個(我當初就是這麼寫的)

當left和right比較大時,二者之和可能會溢位

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 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...