当前位置:首页 > 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

js实现二分查找

未找到处理 循环结束后仍未找到目标值,返回 -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。

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

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, 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

注意事项

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

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

标签: js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现倒计时

js实现倒计时

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

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…