二分查詢容易忽略的乙個bug

2021-06-17 23:01:18 字數 430 閱讀 7519

對於二分查詢演算法,相信大家肯定不會陌生。演算法從乙個排好序的陣列中找指定的元素,如果找到了返回該元素在陣列中的索引,否則返回-1。下面給出了解法。

[cpp]view plain

copy

print?

//a為排好序的陣列,n為陣列的大小,x為指定元素

int binarysearch(int a, int n, int x)  

return -1;  

}  

乍看沒有錯誤,但是不幸的是,該程式存在乙個bug。當陣列極大時,(left+right)可能為負數,則陣列下標溢位,程式崩潰。

解決的方案:將middle=(left+right)/2改為middle=left+(right-left)/2即可。即利用減法代替加法,從而消除上溢。

參考自《**之美》

二分查詢容易忽略的乙個bug

對於二分查詢演算法,相信大家肯定不會陌生。演算法從乙個排好序的陣列中找指定的元素,如果找到了返回該元素在陣列中的索引,否則返回 1。下面給出了解法。a為排好序的陣列,n為陣列的大小,x為指定元素 int binarysearch int a,int n,int x return 1 乍看沒有錯誤,但...

乙個二分查詢程式

原問題來自 http topic.csdn.net u 20090826 18 c08b69e8 ce22 4427 8687 ffb53e380437.html 問題如下 有一連串字母,由且必由若干個 a,b,c,d,e 組成,順序是 若干個 a,若干個 b,若干個 c,若干個 d,若干個 e 即...

手寫乙個二分查詢

二分查詢演算法思想 又叫折半查詢,要求待查詢的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分迴圈這個查詢的過程,如果中間位置的值比待查關鍵字小,則在後半部分迴圈這個查詢的過程。直到查詢到了為止,否則序列中沒有待查的關鍵字。class erfenfa sor...