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

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...

    推荐阅读