通过Java进行二进制搜索

时间:2018-07-05 07:35:53

标签: java algorithm binary-search

请参见下面的Java源代码以实现二进制搜索

public class Main {
    public static void main(String[] args) {

        int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
        int y = binarySearch(x, 11);
        System.out.println(y);

    }

    public static int binarySearch(int[] arr, int value) {
        int searchedIndex = -1;
        int first = 0;
        int last = arr.length - 1;
        int mid;

        while (first <= last) {
            mid = (first + last) / 2;

            if (arr[mid] == value) {
                searchedIndex = mid;
                break;
            } else {
                if (value < arr[mid]) {
                    last = mid - 1;
                } else {
                    first = mid + 1;
                }
            }
        }

        return searchedIndex;
    }
}

int last = arr.length-1 是否为-1强制性。我觉得 last = arr.length-1 都可以正常工作。如果必须,请说明原因。

2 个答案:

答案 0 :(得分:3)

Arrays已经拥有方法binarySearch,您可以使用:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int r = Arrays.binarySearch(x, 11);

答案 1 :(得分:0)

在一种非常特殊的情况下,需要-1:当搜索的值大于数组中的最大值时。例如,使用

调用函数
int y = binarySearch(x, 50);

将抛出ArrayOutOfBounds异常。这是因为mid最终将等于last,并且如果没有-1,则last会超出数组的末尾。