当前位置:首页 > JavaScript

js实现二分查找

2026-01-30 16:22:59JavaScript

二分查找的基本原理

二分查找是一种在有序数组中查找特定元素的算法。通过将数组分成两半,比较中间元素与目标值,逐步缩小搜索范围,直到找到目标或确定不存在。

实现二分查找的步骤

初始化指针 定义两个指针leftright,分别指向数组的起始和末尾位置。

循环条件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;
}

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

边界条件与注意事项

数组必须有序 二分查找要求输入数组是有序的,否则结果不可预测。若数组无序,需先排序。

整数溢出问题 在计算mid时,left + right可能导致整数溢出。更安全的写法是使用left + Math.floor((right - left) / 2)

重复元素处理 若数组中有重复元素,上述代码返回任意一个匹配的索引。如需返回第一个或最后一个匹配项,需进一步调整逻辑。

js实现二分查找

时间复杂度分析

二分查找的时间复杂度为O(log n),其中n是数组长度。每次迭代都将搜索范围减半,效率远高于线性查找的O(n)。

标签: js
分享给朋友:

相关文章

js分组实现

js分组实现

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

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…