【算法与数据结构】—— 二分查找

1. 二分查找的概念

二分查找指的是在排好序的数组中,找到目标元素。如果元素存在则返回元素的下标,不存在则返回-1.
下面以升序为例进行简单描述

2. 查找过程:

取数组中间元素与查找元素target比较。如果target等于中间元素则直接返回中间元素的下标,如果target小于数组中间元素则在数组左边查找,如果target大于数组中间元素则在右边查找。重复以上步骤。

3. 二分查找的时间复杂度

O(logn)

4. Java实现

4.1 迭代版本

public int searchByLoop(int[] arr, int target) {
    return searchByLoop(arr, 0, arr.length - 1, target);
}

private int searchByLoop(int[] arr, int low, int high, int target) {
    while (low <= high) {
        int mid = (low + high) / 2;
        if (target == arr[mid]) {
            return mid;
        } else if (target < arr[mid]) {
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }
    return -1;
}

4.2 递归版本

public int searchByRecursion(int[] arr, int target) {
    return searchByRecursion(arr, 0, arr.length - 1, target);
}


private int searchByRecursion(int[] arr, int low, int high, int target) {
    int mid = (low + high) / 2;
    if (target == arr[mid]) {
        return mid;
    }
    if (low > high) {
        return -1;
    }
    if (target < arr[mid]) {
        return searchByRecursion(arr, low, mid - 1, target);
    }
    return searchByRecursion(arr, mid + 1, high, target);
}

5. 代码地址

Github: https://github.com/bennetty74...

你可能感兴趣的:(【算法与数据结构】—— 二分查找)