DOC / BINARY-SEARCH

可视化 · 计算机科学

二分查找:每次排除一半

在有序序列中比较中点,并反复排除不可能的一半区间。

一句话理解

二分查找利用“序列已经有序”这个信息,每次比较中点后排除一半候选区间。

逐步观察

选择目标值,然后逐步执行。变淡的格子已经被逻辑排除;青色格子是当前中点。

INTERACTIVE / 01

二分查找实验台

003
018
0212
0317
0423
0531
0642
0756
0871

区间 [0, 8],中点 4,当前值 23。

复杂度

如果序列长度是 nn,最多经过约 log2n\log_2 n 次比较:

function binarySearch(values: number[], target: number) {
  let left = 0;
  let right = values.length - 1;

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (values[mid] === target) return mid;
    if (values[mid] < target) left = mid + 1;
    else right = mid - 1;
  }

  return -1;
}

易错点

边界更新必须排除已经检查过的中点,否则可能陷入无限循环。

Sources / 来源

  1. Introduction to Algorithms — Thomas H. Cormen et al.