【发布时间】:2011-10-07 19:03:49
【问题描述】:
我正在阅读一本算法书,其中包含以下二进制搜索算法:
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替换。”
我看不出这会如何导致溢出。当我在脑海中为几个不同的输入运行算法时,我看不到中间值超出数组索引。
那么,什么情况下会发生溢出呢?
【问题讨论】:
-
2个数的加减乘乘都会产生更多的位,所以显然有溢出的可能