代码与动画 BINARY SEARCH
二分查找.
在升序数组中比较中点,每次排除一半查找区间。
时间 O(log n)空间 O(1)要求数组升序
原理与执行逻辑
利用数组的升序关系比较中点与目标,排除不可能包含目标的一半区间。反复缩小候选范围,直到命中或区间为空。
执行步骤
- 以数组首尾下标建立闭区间 [left, right]。
- 计算中点 mid,与目标比较。
- 中点值偏小时令 left = mid + 1,偏大时令 right = mid - 1。
- 相等时返回 mid;left > right 时返回 -1。
关键理解
若目标存在,始终位于当前候选区间内。排除中点后使用 ±1 保证区间缩小;Demo 会先排序,返回的是排序后的下标。
简短示例
在 [1, 3, 5, 7, 9] 中查找 7,先比较 5,排除左半区间,再在下标 3 命中。
代码与执行动画
STEP 0 / 6function binarySearch(arr, target) { let left = 0, right = arr.length - 1; while (left <= right) { const mid = Math.floor((left + right) / 2); if (arr[mid] === target) return mid; if (arr[mid] < target) left = mid + 1; else right = mid - 1; } return -1;}目标 42区间 [0, 7]
当前数据正在操作已访问 / 命中标记 / 指针
0
准备查找
数组已升序排列,从完整区间开始查找。
查找数据
应用后先升序排序,再开始二分查找。
二分查找的操作规则
页面应用数据时会先升序排列;返回排序后数组中的命中下标,不保证重复值的首次位置。预排序成本未计入查找复杂度。
对应题目与扩展练习
观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。
- 对应题目704. 二分查找打开题目
直接对应升序数组中的目标值查找。
- 扩展练习35. 搜索插入位置打开题目
扩展为目标不存在时的插入位置,练习边界处理。