JavaScript数组折半搜索(二分查找)实现原理与代码解析

作者:纸飞机

时间:2026-10-22

浏览:503

本文详细解析JavaScript中折半搜索(二分查找)的实现方法。通过明确起始点、中间点及范围调整逻辑,展示如何高效查找有序数组中的特定值。文章提供完整代码示例,并分析其优于线性搜索的性能优势及仅适用于已排序数组的局限性,适合需要优化查找算法的开发者参考。

文章目录

引言

本文详细介绍JavaScript数组折半搜索的实现方式,旨在为读者提供清晰的参考与学习素材。

折半搜索原理

一、方法原理

当需要在给定的序列数组arr中查找特定值value时,折半搜索法遵循以下逻辑:

1. 确定搜索范围的边界:起始索引startIndex设为0,结束索引endIndex设为arr.length - 1;

2. 计算中间索引:middle = Math.floor((endIndex - startIndex) / 2);

3. 在startIndex < endIndex的条件下,比较arr[middle]与value的大小:

(1) 若arr[middle] < value

调整搜索范围为数组的后半部分,即更新startIndex = middle + 1,保持endIndex = arr.length - 1;

(2) 若arr[middle] > value

调整搜索范围为数组的前半部分,即更新startIndex = 0,endIndex = middle - 1;

随后重新计算middle值,再次比较arr[middle]与value,直至两者相等或startIndex >= endIndex。

代码实现

二、代码实现


// 该例的写法适用于序列为由小到大的数组
function binarySearch(arr, value) {
  var startIndex = 0,
  endIndex = arr.length - 1;
  middle = Math.floor((endIndex - startIndex) / 2);
  while (arr[middle] !== value && startIndex < endIndex) {
    if (arr[middle] > value) {
      endIndex = middle - 1;
    } else if (arr[middle] < value) {
      startIndex = middle + 1;
    }
    middle = Math.floor((endIndex - startIndex) / 2);
  }
  return (arr[middle] !== value) ? -1 : middle;
}

优缺点分析

三、优缺点分析

(1) 优点:

每次查找后,待查数组项数量减半,因此在数组规模较大时,其性能显著优于线性搜索;

(2) 缺点:

该方法仅适用于序列数组,使用前必须对数组进行排序。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript排序算法总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述内容对大家学习JavaScript程序设计有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章