二分查找Binary search
根据单调比较结果不断缩小候选区间。
- 核心约束
- 目标(若存在)始终位于当前候选区间。
- 适用问题
- 有序数组、边界定位、一致性哈希环定位。
- 边界与取舍
- 需要有序或单调条件;随机访问成本也影响效率。
时间与空间#
n 为元素数;比较操作 ,支持 随机访问。
- 时间复杂度
- 最坏 ;最好
- 辅助空间
- 迭代实现
输入已按相同比较规则有序,或谓词满足单调性。链表上的定位移动不是 ,总时间可能为 。返回任一匹配、lower_bound 和 upper_bound 的边界规则不同。
工程中的应用#
3 个案例 · 附源码nginx 的 consistent hash 将上游展开为有序哈希点,再用二分查找定位请求 key 的落点。
附源码片段 · 通信与流量
Git 把内存中的 index 条目指针保存在有序、可增长的数组中,按路径和合并 stage 二分查找位置。
附源码片段 · 索引与查找
CPython 的列表排序识别已有序段,补齐短段,再按 Powersort 策略稳定归并,兼顾局部有序输入与通用排序。
附源码片段 · 检索与计算
基础原理参考资料
Princeton · BinarySearch有序整数数组上的迭代二分实现和对数比较界。