二分查找法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F5eJho7L-1666189283787)(D:\my_software\Typora\localpicture\image-20221019221815409.png)]](/https://i-blog.csdnimg.cn/blog_migrate/055fdf4cfbd345c596703a2481689933.png)
一、关于二分查找法:
- 前置条件:对于有序数列,才能使用二分查找法。
- 、时间复杂度为 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);
}
}
本文介绍了二分查找法的基本概念,包括其应用于有序数列的前置条件和o(logn)的时间复杂度。提供了两种实现方式,分别是非递归和递归实现,并详细解释了代码逻辑。通过二分查找法,可以高效地在大量数据中查找目标元素。

1万+

被折叠的 条评论
为什么被折叠?



