1. 二分查找算法概述
二分查找(Binary Search)是一种在有序数组中查找特定元素的高效算法。它的核心思想是通过不断缩小搜索范围来快速定位目标值,时间复杂度仅为O(log n),远优于线性查找的O(n)。
我第一次接触二分查找是在处理一个包含百万级用户ID的数据库查询优化项目。当时系统使用线性查找导致响应时间超过2秒,改用二分查找后直接降到毫秒级。这种性能提升让我深刻理解了算法选择的重要性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 算法原理与核心思想
2.1 分治策略的实现
二分查找基于分治思想,其工作原理可以类比于我们查字典的过程:
- 打开字典大约中间的位置
- 比较目标字母与当前页首字母
- 根据比较结果决定向前或向后翻页
- 重复直到找到目标单词
在代码实现中,这三个关键步骤对应着:
- 计算中间索引 mid = (low + high) // 2
- 比较 arr[mid] 与 target
- 调整搜索边界 low/high
2.2 算法正确性的前提条件
必须注意二分查找有严格的前提条件:
- 数据集必须是有序的(升序或降序)
- 数据结构必须支持随机访问(如数组)
常见错误:尝试对链表使用二分查找。由于链表不支持O(1)时间复杂度的随机访问,此时二分查找的效率会退化为O(n log n)。
3. 标准实现与优化技巧
3.1 基础实现模板
以下是Python的标准实现版本:
python复制def binary_search(arr, target):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
这个模板包含几个关键点:
- 循环条件
low <= high确保搜索区间有效 - 中间值计算使用地板除法
- 边界调整必须
