繁体   English   中英

二进制搜索实现Java算法

[英]Binary search implementation java algorithm

我需要实现二进制搜索算法的帮助,有人可以告诉我我的代码有什么问题:

public int bsearch(Item idToSearch) { 
    int lowerBoundary = 0;
    int upperBoundary = myStore.size() - 1;
    int mid = -1;

    while(upperBoundary >= lowerBoundary) {
        mid = (lowerBoundary + upperBoundary) / 2;

        //if element at middle is less than item to be searched, than set new lower boundary to mid
        if(myStore.get(mid).compareTo(idToSearch) < 0) {
            lowerBoundary = mid - 1;
        } else {
            upperBoundary = mid + 1;
        }
    } //end while loop

    if(myStore.get(mid).equals(idToSearch)) {
        return mid;
    } else {
        return -1; // item not found
    }
} // end method

我认为您在更新lowerBoundaryupperBoundary时犯了一个错误。

可能是:

    if(myStore.get(mid).compareTo(idToSearch) < 0){
        lowerBoundary = mid + 1;
    } else {
        upperBoundary = mid - 1;
    }

而且,如果在mid找到元素,为什么不中断循环呢?

我会

  • 当上下限相同时停止。
  • 找到比赛时停下
  • 使用mid = (hi + lo) >>> 1; 以避免溢出导致错误。
  • 阅读JDK中的代码,因为它可以正常工作,所以已经执行了此操作。

第一个问题是边界,如果他发现了价值,也应该停下来,但他不会这样做,否则可能会被忽视。

while(upperBoundary >= lowerBoundary)
{
        mid = (lowerBoundary + upperBoundary) / 2;

        if (myStore.get(mid).equals(idToSearch)) break; // goal

        if(myStore.get(mid).compareTo(idToSearch) < 0)
        {
            lowerBoundary = mid + 1;
        }
        else
        {
            upperBoundary = mid - 1;
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM