【算法与数据结构】——|【算法与数据结构】—— 二分查找
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...
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 宽容谁
- 我要做大厨
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 第326天