二进制搜索将无法正常运行

Binary Search won't operate correctly

我正在为我的动态数组 class 编写多重搜索算法,并尝试执行二分搜索,但我的程序无法正确设置整数 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 个值的中间值,您需要将两个值相加 并除以 2.

确保你的数组是升序顺序:

public static boolean search(int[] array, int value) {
    int first = 0, last = array.length - 1, mid = ((first + last) / 2); //Divide by 2
    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 = (last + first) / 2; //Divide by 2
        }
        if (value < array[mid]) {
            last = mid;
            mid = (first + last) / 2; //Divide by 2
        }
        System.out.println(first + " - " + mid + " - " + last);
    }
}