二进制搜索可以通过多种方式实现 - 递归、迭代、条件等。我从 Bentley 的书“编程珍珠:编写正确的程序”中获取了这一点,它是一种迭代实现,并且包含一个错误。
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; 行中发现了一个错误。它可能导致溢出。我们如何避免在这个二分搜索中出现这种溢出?