首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二分查找实现java算法

二分查找实现java算法
EN

Stack Overflow用户
提问于 2014-03-31 09:42:03
回答 3查看 964关注 0票数 1

我需要帮助来实现二进制搜索算法,谁能告诉我我的代码出了什么问题:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2014-03-31 09:47:38

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

可能是:

代码语言:javascript
复制
    if(myStore.get(mid).compareTo(idToSearch) < 0){
        lowerBoundary = mid + 1;
    } else {
        upperBoundary = mid - 1;
    }

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

票数 4
EN

Stack Overflow用户

发布于 2014-03-31 12:21:13

我会的

  • 在下限和上限相同时停止。
  • 当您找到匹配的
  • 时停止使用mid = (hi + lo) >>> 1;以避免溢出导致错误。
  • 读取JDK中的代码,因为它工作正常。<代码>H29<代码>F210
票数 0
EN

Stack Overflow用户

发布于 2014-03-31 14:37:06

第一个问题是边界,你也应该停下来,以防他发现了价值,但他没有导致可能的忽略。

代码语言:javascript
复制
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;
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22752363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档