当前位置:首页 > JavaScript

js实现二分查找

2026-03-01 07:26:39JavaScript

二分查找的原理

二分查找是一种在有序数组中查找特定元素的算法。通过每次将搜索区间减半,快速定位目标值的位置。时间复杂度为O(log n),远优于线性搜索的O(n)。

递归实现

递归方式通过不断缩小搜索范围实现二分查找。需要定义左右边界作为参数,基准条件为左边界超过右边界。

js实现二分查找

function binarySearchRecursive(arr, target, left = 0, right = arr.length - 1) {
  if (left > right) return -1;

  const mid = Math.floor((left + right) / 2);
  if (arr[mid] === target) return mid;

  return arr[mid] > target 
    ? binarySearchRecursive(arr, target, left, mid - 1)
    : binarySearchRecursive(arr, target, mid + 1, right);
}

迭代实现

迭代版本通过while循环调整左右指针位置,避免递归调用带来的栈开销。更适用于大规模数据。

js实现二分查找

function binarySearchIterative(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (arr[mid] === target) return mid;

    arr[mid] > target 
      ? right = mid - 1
      : left = mid + 1;
  }
  return -1;
}

边界条件处理

需特别注意数组为空、目标值超出范围等情况。以下代码添加了前置校验:

function binarySearchWithCheck(arr, target) {
  if (!arr.length || target < arr[0] || target > arr[arr.length - 1]) {
    return -1;
  }
  // 后续使用迭代或递归实现
}

变体应用

查找第一个匹配项时,需要在找到目标值后继续向左搜索:

function findFirstOccurrence(arr, target) {
  let left = 0;
  let right = arr.length - 1;
  let result = -1;

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

性能注意事项

使用位运算计算中点可提升性能: const mid = (left + right) >>> 1 等效于 Math.floor((left + right) / 2),但避免浮点数转换。

标签: js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…