当前位置: 首页 > news >正文

【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. 查找第一个或最后一个出现的位置:通过二分查找,可以扩展算法以查找有序数组中第一个或最后一个目标元素的位置。

五、总结

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


相关文章:

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

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于在有序数组中快速定位目标元素。相比于线性查找&#xff0c;二分查找…...

论文研读:ViT-V-Net—用于无监督3D医学图像配准的Vision Transformer

目录 摘要 介绍 方法 VIT-V-Net体系结构 损失函数 图像相似性度量 变形场正则化 结果与讨论 摘要 在过去的十年里&#xff0c;卷积神经网络(ConvNets)在各种医学成像应用中占据了主导地位并取得了最先进的性能。然而&#xff0c;由于缺乏对图像中远程空间关系的理解&a…...

C++入门到进阶(图文详解,持续更新中)

C入门到进阶&#xff08;图文详解&#xff0c;持续更新中&#xff09; 详解C入门知识到进阶&#xff0c;配合图观看易于理解记录 文章目录 目录 C入门到进阶&#xff08;图文详解&#xff0c;持续更新中&#xff09; 文章目录 前言 一、数据 &#xff08;一&#xff09;数据类…...

【React Hooks原理 - useRef】

概述 在Function Component项目中当我们需要操作dom的时候&#xff0c;第一时间想到的就是使用useRef这个Hook来绑定dom。但是这个仅仅是使用这个Hook而已&#xff0c;为了更好的学习React Hooks内部实现原理&#xff0c;知其所以然。所以本文根据源码从useRef的基础使用场景一…...

MVC之 IHttpModule管道模型《二》

》》》注意&#xff1a;在http请求的处理过程中&#xff0c;只能调用一个HttpHandler&#xff0c;但可以调用多个HttpModule。 HTTP Modules ASP.NET请求处理过程是基于管道模型的&#xff0c;这个管道模型是由多个HttpModule和HttpHandler组成&#xff0c;当请求到达HttpMod…...

2025上海纺织助剂展会+上海织物整理剂展

2025上海纺织助剂展会上海织物整理剂展 2025第十二届中国&#xff08;上海&#xff09;纺织助剂及织物整理剂展览会 时间: 2025年4月23-25日 地点:上海跨国采购会展中心&#xff08;光复西路2739号&#xff09; 展会简介&#xff1a; 2025第12届中国&#xff08;上海&#…...

中科亿海微亮相慕尼黑上海电子展

7月8-10日&#xff0c;备受瞩目的全球电子行业盛会“慕尼黑上海电子展”以空前规模启幕&#xff0c;汇聚了超过1600家参展企业&#xff0c;涵盖了从终端产品制造商到元器件供应商、组装/系统供应商、EMS、ODM/OEM、材料供应商及生产设备供应商的完整产业链。中科亿海微电子科技…...

Spring boot 2.0 升级到 3.3.1 的相关问题 (一)

文章目录 Spring boot 2.0 升级到 3.3.1 的相关问题 &#xff08;一&#xff09;拦截器Interceptor的变动问题介绍解决方案 WebMvcConfigurerAdapter 自定义Mvc配置问题介绍解决方案 Spring boot 2.0 升级到 3.3.1 的相关问题 &#xff08;一&#xff09; 拦截器Interceptor的…...

数据分析——Python网络爬虫(四){爬虫库的使用}

爬虫库 爬虫的步骤urllib库发送请求两种方法案例 爬虫的步骤 #mermaid-svg-h5azjtPInpsU2ZpP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-h5azjtPInpsU2ZpP .error-icon{fill:#552222;}#mermaid-svg-h5azjtPInps…...

C++客户端Qt开发——信号和槽

三、信号和槽 1.信号和槽概述 在Qt中&#xff0c;用户和控件的每次交互过程称为一个事件。比如"用户点击按钮”是一个事件&#xff0c;"用户关闭窗口”也是一个事件。每个事件都会发出一个信号&#xff0c;例如用户点击按钮会发出"按钮被点击"的信号&…...

基于双向长短期记忆 BiLSTM 实现股票单变量时间序列预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…...

微信小程序毕业设计-汽车维修项目管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…...

学习大数据DAY16 PLSQL基础语法5

目录 异常 自定义异常的格式 raise_application_error 处理异常 预定义异常 SQLcode和SQLerrm 非预定义异常 作业 触发器 触发器基本概念 DML触发器 DML触发器使用 instead of 触发器 管理触发器 作业2 函数、过程和包 函数 过程 参数 1. in 参数 2.out 参…...

LabVIEW心电信号自动测试系统

开发了一种基于LabVIEW的心电信号自动测试系统&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现对心电信号的实时采集、分析和自动化测试。系统包括心电信号采集模块、信号处理模块和自动化测试模块&#xff0c;能够高效、准确地完成心电信号的测量与分析。 硬件系统…...

最值得推荐的10款Windows软件!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频播放量破百万https://aitools.jurilu.com/1.音乐播放器——Dopamine Dopamine是一款音乐播放器&#xff0c;设计简洁美观。它支持多种音频格式&#xff0c;包括wav、mp3、ogg…...

游戏视频是后期配音好还是边录边配 游戏视频怎么剪辑制作才能火 视频剪辑免费软件

游戏视频后期配音是先配还是先剪&#xff1f;游戏视频后期配音没有统一的准则&#xff0c;可以先配&#xff0c;也可以后配&#xff0c;主要是根据内容而定。游戏视频剪辑在游戏玩家中十分流行&#xff0c;那么&#xff0c;游戏视频怎么剪辑制作&#xff1f;下面让我们以具体的…...

配置 Node.js 内存限制

配置 Node.js 内存限制 Node.js 应用程序通常需要配置堆内存的大小以优化性能和避免内存溢出问题。你可以通过命令行参数、环境变量或系统属性来设置 Node.js 的内存限制。下面将分别介绍在 Windows、Linux 和 macOS 系统下的配置方法。 Windows 系统 1. 命令行参数方式 在…...

ORA-12518: TNS: 监听程序无法分发客户机连接

ORA-12518: TNS: 监听程序无法分发客户机连接 OracleService 服务停止了&#xff0c;启动就好了...

2.5 计算机网络

声明&#xff1a;文章参考的《系统架构设计师教程&#xff08;第二版&#xff09;》&#xff0c;如有侵权&#xff0c;本人将立即修改和删除。 利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;并依靠网络软件以及通信协议实现…...

同三维T80004ESL编码器视频使用操作说明书:高清HDMI编码器,高清SDI编码器,4K超清HDMI编码器,双路4K超高清编码器

同三维T80004ESL编码器视频使用操作说明书&#xff1a;高清HDMI编码器&#xff0c;高清SDI编码器&#xff0c;4K超清HDMI编码器&#xff0c;双路4K超高清编码器 同三维T80004ESL编码器视频使用操作说明书&#xff1a;高清HDMI编码器&#xff0c;高清SDI编码器&#xff0c;4K超清…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

Easy Excel

Easy Excel 一、依赖引入二、基本使用1. 定义实体类&#xff08;导入/导出共用&#xff09;2. 写 Excel3. 读 Excel 三、常用注解说明&#xff08;完整列表&#xff09;四、进阶&#xff1a;自定义转换器&#xff08;Converter&#xff09; 其它自定义转换器没生效 Easy Excel在…...

AWS vs 阿里云:功能、服务与性能对比指南

在云计算领域&#xff0c;Amazon Web Services (AWS) 和阿里云 (Alibaba Cloud) 是全球领先的提供商&#xff0c;各自在功能范围、服务生态系统、性能表现和适用场景上具有独特优势。基于提供的引用[1]-[5]&#xff0c;我将从功能、服务和性能三个方面进行结构化对比分析&#…...