当前位置:首页 > JavaScript

js实现二分查找

2026-04-04 08:03:47JavaScript

二分查找的基本原理

二分查找是一种高效的搜索算法,适用于已排序的数组。通过每次将搜索范围减半,快速定位目标值的位置。时间复杂度为 O(log n)。

实现步骤

初始化指针 定义左指针 left 初始为 0,右指针 right 初始为数组长度减 1。

循环条件left 小于等于 right 时,计算中间索引 mid,取 Math.floor((left + right) / 2)

比较中间值 若中间值等于目标值,直接返回 mid。若中间值小于目标值,调整 leftmid + 1;否则调整 rightmid - 1

未找到处理 循环结束后仍未找到目标值,返回 -1 或其他标识符。

代码示例

function binarySearch(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;
        } else if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}

边界条件处理

空数组检查 在函数开始处添加对空数组的判断,直接返回 -1。

非数值处理 确保目标值和数组元素类型一致,避免隐式转换导致的错误。

递归实现

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, mid + 1, right)
        : binarySearchRecursive(arr, target, left, mid - 1);
}

性能优化

位运算计算中点 使用 (left + right) >>> 1 替代 Math.floor,避免浮点数运算,提升速度。

提前终止 在特定场景下,如重复元素中寻找第一个或最后一个匹配项,可调整比较逻辑提前终止循环。

实际应用示例

const sortedArray = [1, 3, 5, 7, 9];
console.log(binarySearch(sortedArray, 5)); // 输出: 2
console.log(binarySearch(sortedArray, 10)); // 输出: -1

注意事项

数组必须有序 二分查找要求输入数组严格升序或降序排列,否则结果不可预测。

js实现二分查找

大数处理 left + right 可能溢出,使用 left + (right - left) / 2 更安全。

标签: js
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现倒计时

js实现倒计时

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

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选框 co…