二分查找算法详解
二分查找(Binary Search)是一种在有序数组中查找特定元素的高效算法。它的核心思想是分而治之,每次将搜索范围缩小一半。
基本原理
想象你在查英语字典找"apple"这个词:
- 翻开字典的中间
- 如果这一页的单词在"apple"之前,就往后翻
- 如果这一页的单词在"apple"之后,就往前翻
- 重复这个过程,直到找到"apple"
这就是二分查找的生活例子。
算法步骤
假设有一个升序数组 arr,要查找目标值 target:
- 初始化左指针
left = 0,右指针right = n-1 - 当
left <= right时循环:- 计算中间位置
mid = left + (right - left) / 2(防止整数溢出) - 如果
arr[mid] == target,找到目标,返回mid - 如果
arr[mid] < target,说明目标在右半部分,left = mid + 1 - 如果
arr[mid] > target,说明目标在左半部分,right = mid - 1
- 计算中间位置
- 循环结束未找到,返回 -1
代码实现
基础版本(查找精确值)
int binarySearch(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left <= right) {
// 避免 (left + right) 可能溢出
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid; // 找到目标
} else if (nums[mid] < target) {
left = mid + 1; // 目标在右半部分
} else {
right = mid - 1; // 目标在左半部分
}
}
;
}


