蓝桥杯备考随手记: 二分查找
二分查找(Binary Search)是一种在有序数组中查找目标值的算法,也称为折半查找。它通过将目标值与数组的中间元素进行比较,来确定目标值在数组的哪一部分,然后将搜索范围缩小一半,再次比较,直到找到目标值或者确定目标值不存在。
1. 基本思想
- 首先,将数据集合按照某种顺序(通常是升序或降序)排列。
- 然后,选择数据集合的中间元素进行比较,若目标值等于中间元素,则查找成功;若目标值小于中间元素,则在左半部分继续查找;若目标值大于中间元素,则在右半部分继续查找。
- 重复以上步骤,直到找到目标值或者确定目标值不存在为止。
2. 算法步骤
二分查找的实现步骤如下:
- 定义搜索范围的起始位置
left
和结束位置right
,初始时left = 0
,right = n-1
,其中n
是数组的长度。 - 计算中间元素的位置
mid
,即mid = (left + right) / 2
。 - 将目标值与中间元素进行比较:
- 如果目标值等于中间元素,则找到了目标值,返回其索引。
- 如果目标值小于中间元素,则目标值可能在左侧,更新
right = mid - 1
。 - 如果目标值大于中间元素,则目标值可能在右侧,更新
left = mid + 1
。
- 重复步骤2和3,直到找到目标值或者搜索范围缩小为空。
3. 代码实现
下面是使用Java编写的二分查找算法示例:
public class BinarySearch {
// 二分查找算法
public static int binarySearch(int[] arr, int target) {
int left = 0; // 左边界初始化为数组第一个元素的下标
int right = arr.length - 1; // 右边界初始化为数组最后一个元素的下标
// 当左边界小于等于右边界时,继续查找
while (left <= right) {
int mid = left + (right - left) / 2; // 计算中间位置的下标
// 如果目标元素等于中间位置的元素,则返回中间位置
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) { // 如果目标元素大于中间位置的元素,更新左边界
left = mid + 1;
} else { // 如果目标元素小于中间位置的元素,更新右边界
right = mid - 1;
}
}
return -1; // 目标元素不存在于数组中
}
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9, 11, 13, 15}; // 有序数组
int target = 7; // 目标元素
int index = binarySearch(arr, target); // 调用二分查找算法
// 输出查找结果
if (index != -1) {
System.out.println("目标元素 " + target + " 在数组中的索引位置为 " + index);
} else {
System.out.println("目标元素 " + target + " 不存在于数组中");
}
}
}
4. 复杂度分析
- 时间复杂度:𝑂(log𝑛),每次查找都将数据量减半。
- 空间复杂度:𝑂(1),只需要常数级别的额外空间。
5. 优缺点
- 优点:效率高,适用于有序数据集合的查找。
- 缺点:要求数据集合必须有序;不适用于动态数据集合。
6. 应用场景
- 静态数据集合的查找,如数组、有序列表等。
- 需要快速定位元素位置的场景。
- 数据集合较大且有序的情况下,可以大幅减少查找时间。
原文地址:https://blog.csdn.net/DaPiCaoMin/article/details/137463983
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!