java - 二分查找无法正确运行

标签 java search binary-search

我正在为动态数组类编写多重搜索算法,并尝试实现二分搜索,但我的程序无法正确设置整数 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 - 1117250 - 0 - 1270 - 0 - 15)。 非常感谢所有帮助!

最佳答案

不应该:

mid = ((first + last) / array.length)

...实际上是这样的

mid = ((first + last) / 2)

...而不是让您获得mid

要获得两个值之间的中间值,您需要将两个值相加并除以 2

关于java - 二分查找无法正确运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31236782/

相关文章:

java - 具有简历功能的 PHP 上传文件

java - JAXB 每个应用程序一个 Marshaller 实例和 Unmarshaller 实例

java - 使用 maven 使用 log4j 构建项目

php - 递归数组搜索

c - 在 c 中的字符数组的特定成员上使用 "strcmp"

java - Java ArrayList中的contains()方法是否使用二分查找?

algorithm - 为什么二分查找是一种分而治之的算法?

Java 浮点意外圆角化

sql-server - 如何实现企业搜索

java - 在矩形流中进行快速点搜索