二分查找法
一、关于二分查找法:
- 前置条件:对于有序数列,才能使用二分查找法。
- 、时间复杂度为 o(logn)级别。
- 应用于查找次数大于排序查找情况下
- 每次都对半分
二、代码实现
/**
* 功能:二分查找法
* 创建时间:2022/10/16 16:20
*/
public class BinarySearch {
//方式一:非递归方式实现
public static <E extends Comparable<E>> int search(E[] array, E target) {
int l = 0, r = array.length - 1;
//循环不变量 [l,r]范围查找target元素
while (l <= r) {
int mid = l + (r - l) / 2;
if (array[mid].compareTo(target) == 0) return mid;
if (array[mid].compareTo(target) < 0)
l = mid + 1;
else
r = mid - 1;
}
return -1;
}
//方式二:递归方式实现
public static <E extends Comparable<E>> int searchR(E[] array, E target) {
return searchR(array, 0, array.length - 1, target);
}
private static <E extends Comparable<E>> int searchR(E[] array, int l, int r, E target) {
if (l > r) return -1;
int mid = l + (r - l) / 2;
if (array[mid].compareTo(target) == 0) return mid;
if (array[mid].compareTo(target) < 0)
return searchR(array, mid + 1, r, target);
else
return searchR(array, l, mid - 1, target);
}
}