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