我在读一本关于算法的书,书中提到了二进制搜索的算法:
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;
,它可能导致溢出,应该由 m = l + (u-l)/2
代替。”
我不明白这怎么会导致人满为患。当我在脑海中对几个不同的输入运行这个算法时,我没有看到数组索引中的中间值消失。
那么,在哪些情况下会发生溢出呢?