二分查找 (Binary Search)

在有序数组中高效查找特定元素的算法

算法原理

二分查找(又称折半查找)要求数组必须是有序的。每次将查找范围缩小一半,因此效率极高。

核心步骤:
  • 令 L 为起始下标,R 为结束下标。
  • 计算中间位置 mid = (L + R) / 2。
  • 如果 arr[mid] == target,查找成功!
  • 如果 arr[mid] > target,说明目标在左半边,则 R = mid - 1。
  • 如果 arr[mid] < target,说明目标在右半边,则 L=mid + 1。
  • 重复直到 L > R,查找失败。

演示

L: -
R: -
mid: -
点击"开始查找"以观察
int L = 0, R = n - 1;
while (L <= R) {
int mid = L + (R - L) / 2;
if (arr[mid] == target) return mid;
else if (arr[mid] > target) R = mid - 1;
else L = mid + 1;
}
return -1; // 没找到

算法分析

特性 描述
时间复杂度 $$ O(\log n) $$ - 每次砍掉一半,100万个数据也只需找20次!
前提条件 数组必须有序 (Monotonic)