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

93 阅读1分钟

更多建站及源码交易信息请见 GoodMai 好买网

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:github.com/bennetty74.…