java - 自定义二分查找功能无法正常工作

标签 java loops binary-search

我正在创建自定义二进制搜索函数,但遇到了问题。我已经浏览了代码很长一段时间了,但是,我不明白为什么没有返回。请让我知道你在想什么。谢谢!

a是数组,b是最后返回的结果,t是目标值。 Pos 是当前位置,min 和 max 是最小和最大位置。

public static int binarySearch(int a[], int t){
    int min = 0;
    int max = a.length;
    if (a[0] == t){
        return 0;
    }
    int b = -1;
    for (int pos = min; a[pos] != t;){
        pos = (max - min) / 2;
        if (a[pos] == t){
            b = pos;
        } else {
            if(t > a[pos]){
                min = pos + 1;
            } else {
                min = pos - 1;
            }
        }
    }
    return b;
}

最佳答案

两个小问题

pos = (max - min) / 2;

看起来您正在尝试找到值的平均值,但实际上找到的是差异的一半

要查找平均值,请使用 pos = (max - min) / 2 + min;

移动 max 时也是如此向下,您不小心移动了 min改为向上

min = pos - 1;应该是 max = pos - 1;

关于java - 自定义二分查找功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46962411/

相关文章:

mysql - 如何在MySQL语句中使用嵌套循环和变量

java - 请帮助,FileNotFoundException 等问题

c# - 如何使用循环随机选择一个形状来绘制多个?

python - 返回列表中给定数字之前的数字

c - bsearch 对按降序排序的数组

algorithm - 如何从建筑物中扔出 2 个鸡蛋并用 ~c*sqrt(F) throws 找到 F 层?

java - 调用 close 方法后打开 MongoDB 连接的问题

java - 在gradle多项目中,如何构建单个jar并将其发布到maven?

java - 使用流读取文本文件 - lambda 表达式中的变量

java - 在调度程序中捕获 Throwable 是一个好习惯吗?