二進制搜索可以通過多種方式實現 - 遞歸,迭代,條件等。我從賓利的書「編程珍珠:編寫正確的程序「這是一個迭代實現,並且包含一個bug。修復賓利書籍(編程珍珠:編寫正確的程序)中的二進制搜索錯誤
public class BinSearch
{
static int search(int [] A, int K) {
int l = 0;
int u = A. length -1;
int m;
while (l <= u) {
m = (l+u) /2;
if (A[m] < K){
l = m + 1;
} else if (A[m] == K){
return m;
} else {
u = m-1;
}
}
return -1;
}
}
我在行m =(l + u)/ 2中發現了一個錯誤;它可能導致溢出。我們如何避免這種二分查找中的溢出?
而不是'while(l <= U)'是'while(l <= u)'而不是? – Machtl
我從書中拿...編程珍珠:寫出正確的程序。 –
'U'將是未知的標識符,'u'更有意義。你有沒有試圖編譯它? – Machtl