java - 二分查找实现java算法

标签 java algorithm search binary

我在实现二分查找算法方面需要帮助,谁能告诉我我的代码有什么问题:

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 找到元素,为什么不中断循环?

关于java - 二分查找实现java算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22752363/

相关文章:

algorithm - 想不通这个算法的通用名叫什么?

algorithm - 对 [1, 5000] 范围内 1000 个不同整数的数组进行排序,每个元素最多访问一次

php - 使用 WHERE 子句 mysql_query 和 mysql_fetch_array 进行基本搜索

search - 如何在 solr 中增加更长的 ngram?

java - 处理Java中某些情况下不希望返回类型的函数返回

java - 显示存储在 HashMap 中的对象值

c# - 计算给定时间段内的正常工作日

flutter - Flutter 中具有搜索功能的 sliver 应用栏

java - 检查instanceOf但不执行

java - Camunda Process Engine 配置与 Wildfly 的 MockExpressionManager