二进制搜索Java错误

用户名

我得到了这种二进制搜索,以找出问题所在。有一行被注释掉,到目前为止,我唯一能想到的就是删除该行,因为我认为这不是必需的。除此之外,我想不出有什么遗漏-确实有明显的错误之处吗?

public boolean search(int val) {
    int low = 0;
    int high = size-1;
    int middle = -1;
    boolean found = false;
    while (!found && low < high) {
        middle = low + (high-low)/2;
        if (a[middle] == val)
           found = true;
        else if (a[middle] < val)
           low = middle + 1;
        else // (a[middle] > val)
           high = middle - 1;
    }
    return found;
}
米格维尔

让我们来看一下您的数组中有2个值:[0,1]并寻找值1的情况。让我们运行代码:

int low = 0;
int high = size-1; // high = 1
int middle = -1;
boolean found = false;
while (!found && low < high) {
    middle = low + (high-low)/2; // middle = 0 + (1-0) / 2 = 0
    if (a[middle] == val) // FALSE (because a[0] = 0)
       found = true;
    else if (a[middle] < val) // TRUE (because a[0] = 0 and 0 < 1)
       low = middle + 1;  // low = 0 + 1 = 1
    else // (a[middle] > val)
       high = middle - 1;
}
return found;

因为low = 1,low < high即使您的数组中存在1,您也可以退出循环,因为您有条件并且返回false。

问题来自middle = low + (high-low)/2;使用int并将被四舍五入的事实

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章