二分查找法 (Binary Search)

对于有序数列,才能使用二分查找法

有递归实现和非递归实现两种

非递归实现

public static int find(Comparable[] arr, Comparable target) {
    // 在arr[l, r]中查找target
    int l = 0, r = arr.length - 1;
    while (l <= r) {
        int mid = l/2 + r/2;
        if (arr[mid].compareTo(target) == 0) {
            return mid;
        } else if (arr[mid].compareTo(target) > 0) {
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    return -1;
}

递归实现

public static int find(Comparable[] arr, Comparable target) {
    return _find(arr, 0, arr.length - 1, target);
}

private static int _find(Comparable[] arr, int l, int r, Comparable target) {
    if (l > r) {
        return -1;
    }
    int mid = l/2 + r/2;
    if (arr[mid].compareTo(target) == 0) {
        return mid;
    } else if (arr[mid].compareTo(target) > 0) {
        return  _find(arr, l, mid - 1, target);
    } else {
        return  _find(arr, mid + 1, r, target);
    }
}

results matching ""

    No results matching ""