二分查找,也叫折半查找,
效率较高,
排序方式:要求线性表 顺序存储
时间复杂度:O(log2n)
原理:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
比如我们要查找 2
找到数组的中间值下标,(9-0)/2 = 4 .
比交中间值,2 < arr[4]
那么又在 左侧比较:
0 | 1 | 2 | 3 |
2 > arr[(3-0)/2]
... ...
代码实现:
使用 java 语言
/**
* 二分查找
* @param arr
* @param key
* @param start
* @param end
* @return
*/
static int binSearch(int[] arr, int key, int start, int end) {
int mid = (end - start) / 2 + start;
if (start > end) {
return -1;
} else if (key == arr[mid]) {
return mid;
} else if (key < arr[mid]) {
return binSearch(arr, key, start, mid - 1);
} else if (key > arr[mid]) {
return binSearch(arr, key, mid + 1, end);
}
return -1;
}