• 【JavaScript 算法】二分查找:快速定位目标元素


    在这里插入图片描述

    🔥 个人主页:空白诗

    在这里插入图片描述

    在这里插入图片描述

    二分查找(Binary Search)是一种高效的查找算法,适用于在有序数组中快速定位目标元素。相比于线性查找,二分查找的时间复杂度为 O(log n),具有较高的效率。本文将详细介绍二分查找算法的原理、实现及其应用。


    一、算法原理

    二分查找通过不断将查找范围减半,从而快速定位目标元素。其基本步骤如下:

    1. 初始化查找范围为数组的起始索引和结束索引。
    2. 计算中间索引。
    3. 将中间索引的元素与目标元素进行比较。
      • 如果相等,则找到目标元素,返回其索引。
      • 如果目标元素小于中间索引的元素,则将查找范围缩小到左半部分。
      • 如果目标元素大于中间索引的元素,则将查找范围缩小到右半部分。
    4. 重复上述步骤,直到查找范围为空或找到目标元素。


    二、算法实现

    以下是二分查找的JavaScript实现:

    /**
     * 二分查找算法
     * @param {number[]} arr - 有序数组
     * @param {number} target - 目标元素
     * @return {number} - 目标元素的索引,未找到返回 -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 arr = [1, 3, 5, 7, 9, 11, 13];
    const target = 7;
    const index = binarySearch(arr, target);
    console.log(index); // 输出: 3
    '
    运行

    三、应用场景

    1. 有序数组查找:在有序数组中快速定位元素的位置。
    2. 求解问题:用于求解某些需要二分查找的算法问题,如寻找数组中的峰值元素。
    3. 数据分析:在数据分析中,二分查找用于快速查找特定值的位置。

    四、优化与扩展

    1. 递归实现:除了迭代实现外,二分查找也可以用递归方式实现。
    /**
     * 递归实现二分查找算法
     * @param {number[]} arr - 有序数组
     * @param {number} target - 目标元素
     * @param {number} left - 左索引
     * @param {number} right - 右索引
     * @return {number} - 目标元素的索引,未找到返回 -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; // 找到目标元素
      } else if (arr[mid] < target) {
        return binarySearchRecursive(arr, target, mid + 1, right); // 查找右半部分
      } else {
        return binarySearchRecursive(arr, target, left, mid - 1); // 查找左半部分
      }
    }
    
    // 示例
    const indexRecursive = binarySearchRecursive(arr, target);
    console.log(indexRecursive); // 输出: 3
    
    1. 查找第一个或最后一个出现的位置:通过二分查找,可以扩展算法以查找有序数组中第一个或最后一个目标元素的位置。

    五、总结

    二分查找是一种高效的查找算法,通过不断将查找范围减半,可以在有序数组中快速定位目标元素。理解和掌握二分查找算法对于解决许多实际问题和优化程序性能都具有重要意义。希望本文对你理解和应用二分查找有所帮助。


  • 相关阅读:
    7.【散列查找】
    创意电子学-小知识:晶体管
    深入了解Python类与面向对象编程
    rk3588 编译内核遇到问题解决
    2021数据库小测一
    高阶操作(where和gather函数)
    【C++】根据字符切割字符串
    串口触摸屏的键盘控制
    振弦式轴力计和振弦采集仪组成的安全监测解决方案
    WPF“x:name”和“name”有什么区别
  • 原文地址:https://blog.csdn.net/m0_52827996/article/details/140364738