学习首页/查找算法/二分查找交互演示 · JavaScript

代码与动画 BINARY SEARCH

二分查找.

在升序数组中比较中点,每次排除一半查找区间。

时间 O(log n)空间 O(1)要求数组升序

原理与执行逻辑

利用数组的升序关系比较中点与目标,排除不可能包含目标的一半区间。反复缩小候选范围,直到命中或区间为空。

执行步骤

  1. 以数组首尾下标建立闭区间 [left, right]。
  2. 计算中点 mid,与目标比较。
  3. 中点值偏小时令 left = mid + 1,偏大时令 right = mid - 1。
  4. 相等时返回 mid;left > right 时返回 -1。

关键理解

若目标存在,始终位于当前候选区间内。排除中点后使用 ±1 保证区间缩小;Demo 会先排序,返回的是排序后的下标。

简短示例

在 [1, 3, 5, 7, 9] 中查找 7,先比较 5,排除左半区间,再在下标 3 命中。

代码与执行动画

STEP 0 / 6
二分查找
function 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;}
10 行 · 0 个片段标记
目标 42区间 [0, 7]
120181252303424555656807
当前数据正在操作已访问 / 命中标记 / 指针
0

准备查找

数组已升序排列,从完整区间开始查找。

查找数据

应用后先升序排序,再开始二分查找。

数组 2 至 10 项;元素和目标值范围 1 至 99。

实现说明

二分查找的操作规则

页面应用数据时会先升序排列;返回排序后数组中的命中下标,不保证重复值的首次位置。预排序成本未计入查找复杂度。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。