對於二分查詢演算法,相信大家肯定不會陌生。演算法從乙個排好序的陣列中找指定的元素,如果找到了返回該元素在陣列中的索引,否則返回-1。下面給出了解法。
//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。下面給出了解法。cpp view plain copy print?a為排好序的陣列,n為陣列的大小,x為指定元素 int binarysearch int a,int...
乙個二分查詢程式
原問題來自 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...