我在读这有二进制搜索以下算法的算法书:在二进制搜索计算中旬
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的数字都会产生更多的位,所以很明显会有溢出的机会 –
[二分查找中值计算]可能重复(http://stackoverflow.com/questions/4534342/binary-search-中间值计算) –