首页 > 编程语言 >前端开发中的二分查找算法

前端开发中的二分查找算法

时间:2024-07-16 09:20:45浏览次数:15  
标签:二分 arr mid 算法 查找 目标值 前端开发

在前端开发中,处理和搜索大量数据时,效率是一个关键因素。二分查找算法是一种高效的查找算法,适用于在有序数组中快速找到目标值。本文将详细介绍二分查找算法的基本原理、实现方法及其在前端开发中的应用。

什么是二分查找?

二分查找(Binary Search)是一种在有序数组中查找目标值的算法。它通过不断将查找范围缩小一半来快速锁定目标值的位置。该算法的时间复杂度为 O(log n),显著优于线性查找算法的 O(n)。

二分查找的工作原理

  1. 初始化:确定数组的起始索引和结束索引。
  2. 计算中间点:取中间索引值 mid = (left + right) / 2
  3. 比较中间值
    • 如果中间值等于目标值,则查找成功,返回中间索引。
    • 如果中间值小于目标值,则将查找范围缩小到中间索引的右侧部分。
    • 如果中间值大于目标值,则将查找范围缩小到中间索引的左侧部分。
  4. 重复步骤 2 和 3:直到找到目标值或查找范围为空。

二分查找的实现

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

function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    let 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, 11, 13, 15];
const targetValue = 7;

const result = binarySearch(sortedArray, targetValue);
console.log(result); // 输出 3,因为 7 在数组中的索引是 3

 

二分查找的应用场景

  1. 数组查找:快速在有序数组中查找目标值的位置。
  2. DOM 操作:在前端开发中,二分查找可以用于优化 DOM 操作,例如在虚拟 DOM 中高效查找特定节点。
  3. 数据处理:处理和分析大数据集时,通过二分查找快速定位特定数据点。

优化和变种

  1. 递归实现:除了迭代实现,二分查找也可以使用递归方式实现:
function recursiveBinarySearch(arr, target, left, right) {
  if (left > right) {
    return -1; // 未找到目标值
  }

  let mid = Math.floor((left + right) / 2);

  if (arr[mid] === target) {
    return mid; // 找到目标值,返回索引
  } else if (arr[mid] < target) {
    return recursiveBinarySearch(arr, target, mid + 1, right); // 右侧部分
  } else {
    return recursiveBinarySearch(arr, target, left, mid - 1); // 左侧部分
  }
}

// 使用递归实现
const resultRecursive = recursiveBinarySearch(sortedArray, targetValue, 0, sortedArray.length - 1);
console.log(resultRecursive); // 输出 3

 

变种算法:二分查找的变种包括查找第一个或最后一个符合条件的元素、查找插入位置等。

 

标签:二分,arr,mid,算法,查找,目标值,前端开发
From: https://www.cnblogs.com/zx618/p/18304486

相关文章

  • Linux的文件查找吉计划任务练习题
    #练习1 使用ls查看/etc/目录下的所有文件信息[root@gym~]#ls/etc/#练习2 使用ls查看/etc/⽬录下名包含“a”字⺟的⽂件或者⽬录信息[root@gym~]#ls/etc/|grep'a'#练习3 使用ls查看/etc/目录下以“.conf”结尾的文件信息[root@gym~]#ls/etc/*.conf#......
  • python-查找算法
    查找算法1.线性查找2.二分查找3.插值查找4.斐波那契查找1.线性查找"""线性查找:对于被查找的序列没有顺序要求,可以是有序的,也可以是无序的,查找时从线性表的起始位置按照顺序匹配,找到元素时,返回该元素在原始字符串的下标若匹配完整个序列......
  • 二分查找模板
    二分查找主要难点在于边界判定,逻辑相对简单,下文以力扣704.二分查找为例分析二分查找的代码模板。题目描述给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1。来源:力扣(LeetCode)原......
  • Day33.元类下的属性查找
    1.元类下的属性查找_对象.方法和类名.方法的查找经过#todo属性查找的原则:对象->类->父类#todo切记:父类不是元类classMymeta(type):n=444def__call__(self,*args,**kwargs):#self=<class'__main__.StanfordTeacher'>obj=self.__new......
  • 二分专题
    二分最重要的就是check函数的编写以及边界的控制1.一定区间的完全平方数个数(除二分以外的简单写法)查看代码cout<<(int)(floor(sqrt(b))-ceil(sqrt(a))+1)<<endl;2.跳石头(为了最大化最小间隙,通过二分跳跃距离,期间通过和撤走石头数量进行比较,来判断此距离是否过短或......
  • 身份证信息查找
    身份证信息查看publicclass身份证信息查看{publicstaticvoidmain(String[]args){/*7-14位是出生年月日16位是性别↓任务信息为:出生年月日:×××年××月××日性别:(男/女)*/......
  • 前端开发--中的 Git 基本使用
     什么是Git?Git是一个开源的分布式版本控制系统,用于跟踪源代码的更改。它允许多个开发者协同工作,管理项目的各个版本,并能够轻松地恢复到之前的版本。安装Git在开始使用Git之前,需要先安装它。可以从Git官网下载并安装适用于各个平台的Git客户端。安装完成后,可以通过......
  • 前端开发-- Webpack 代码分割和懒加载技术
    在现代前端开发中,优化应用性能是一个至关重要的任务。Webpack作为一个强大的打包工具,为我们提供了代码分割和懒加载的功能,可以显著提升应用的加载速度和用户体验。本文将深入解析Webpack的代码分割和懒加载技术,帮助开发者更好地理解和应用这些技术。什么是代码分割?代码分割(Co......
  • 深度解析前端开发中的解构赋值
    在现代JavaScript开发中,解构赋值(DestructuringAssignment)是一种非常实用且强大的语法。它可以从数组或对象中提取值,并将其赋值给变量,使代码更加简洁和可读。本文将详细介绍解构赋值的各种用法及其应用场景,帮助你更好地在前端开发中运用这一特性。什么是解构赋值?解构赋值是ES......
  • C++查找最大元素与s.find()和s.insert()
    题目描述:m老师在学习字符串的时候,对于字符串中的最大字符很感兴趣。因此他想对于输入的每个字符串,查找其中的ASCII码最大字母,在该字母后面插入字符串“(max)”。输入描述输入数据包括多个测试实例,第一行输入一个整数n表示样例个数。每个实例由一行长度不超过100的字符串......