二分查找算法简介
二分查找(Binary Search),也称为折半查找,是一种高效的有序数组查找算法。其核心思想是通过不断将搜索区间减半,快速缩小目标值的可能范围,最终找到目标值或确定其不存在。该算法的时间复杂度为 O(log n),远优于顺序查找的 O(n),在处理大规模有序数据时优势显著。
17. 二分查找
题目描述: 给定一个升序排列的整数数组 nums 和一个目标值 target,找出目标值在数组中的索引。如果不存在,返回 -1。
解法:
算法流程:
- 定义 left、right 指针,分别指向数组的左右区间。
- 找到待查找区间的中间点 mid,找到之后分三种情况讨论:
- arr[mid] == target:说明正好找到,返回 mid 的值;
- arr[mid] > target:说明 [mid, right] 这段区间都是大于 target 的。因此舍去右边区间,往左边 [left, mid-1] 的区间继续查找,即让 right = mid - 1,然后重复步骤 2;
- arr[mid] < target:说明 [left, mid] 这段区间的值都是小于 target 的。因此舍去左边区间,在右边 [mid+1, right] 区间继续查找,即让 left = mid + 1,然后重复步骤 2。
- 当 left 与 right 错开时,说明整个区间都没有这个数,返回 -1。
C++ 算法代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 防止数据溢出
if (nums[mid] < target)
left = mid + 1;
else if (nums[mid] > target)
right = mid - 1;
else
return mid;
}
return -1;
}
};
二分查找算法模板:
int left = 0, right = nums.() - ;
(left <= right) {
mid = left + (right - left) / ;
(条件判断) left = mid + ;
(条件判断) right = mid - ;
结果;
}


