我正在为动态数组类编写多重搜索算法,并尝试实现二分搜索,但我的程序无法正确设置整数 mid
的值。
以下是该方法的代码:
public static boolean search(int[] array, int value) {
int first = 0, last = array.length - 1, mid = ((first + last) / array.length);
System.out.println(first + " - " + mid + " - " + last);
while(true) {
System.out.println(first + " - " + mid + " - " + last);
if (value == array[mid]) {return true;}
if (first == last || mid == last || mid == first) {return false;}
if (value > array[mid]) {
first = mid;
mid = (first + last) / (last + 1);
}
if (value < array[mid]) {
last = mid;
mid = (first + last) / (last + 1);
}
System.out.println(first + " - " + mid + " - " + last);
}
}
我运行了该程序数百次测试,但是 mid 的值始终为 0(输出为 0 - 0 - 111725
或 0 - 0 - 127
或0 - 0 - 15
)。
非常感谢所有帮助!
最佳答案
不应该:
mid = ((first + last) / array.length)
...实际上是这样的
mid = ((first + last) / 2)
...而不是让您获得mid
?
要获得两个值之间的中间值,您需要将两个值相加并除以 2。
关于java - 二分查找无法正确运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31236782/