手撕数据结构02--二分搜索(附源码)
一、理论基础
二分搜索,也称折半搜索、对数搜索,是一种在有序数组中查找某一特定元素的搜索算法。
二分搜索是一种高效的查找算法,适用于在已排序的数组中查找特定元素。它的基本思想是通过不断将搜索区间对半分割,从而快速缩小查找范围。
二分搜索每次把搜索区域减少一半,时间复杂度为 O(logn)(n代表集合中元素的个数)。
二分搜索的基本步骤如下:
1.初始条件:将搜索范围设为数组的整个区间。
2.查找中间元素:计算当前区间的中间索引。
3.比较中间元素:将中间元素与目标值进行比较:
- 如果中间元素等于目标值,查找成功,返回中间索引。
- 如果中间元素小于目标值,将搜索范围缩小到右半部分。
- 如果中间元素大于目标值,将搜索范围缩小到左半部分。
4.重复步骤 2 和 3,直到找到目标值或搜索范围为空。
在下图中为大家展示了二分搜索的过程:

二、代码实现
#include <iostream>
#include <vector>
using namespace std;int binarySearchRecursive(const vector<int>& arr, int left, int right, int target)
{if (left <= right) {int mid = left + (right - left) / 2; if (arr[mid] == target) {return mid;}if (arr[mid] > target) {return binarySearchRecursive(arr, left, mid - 1, target);}return binarySearchRecursive(arr, mid + 1, right, target);}return -1;
}int main()
{vector<int> arr = { 2, 3, 4, 10, 40 };int target = 10;int result = binarySearchRecursive(arr, 0, arr.size() - 1, target);if (result != -1) {cout << "元素在索引 " << result << " 处找到" << endl;}else {cout << "元素未找到" << endl;}return 0;
}
相关文章:
手撕数据结构02--二分搜索(附源码)
一、理论基础 二分搜索,也称折半搜索、对数搜索,是一种在有序数组中查找某一特定元素的搜索算法。 二分搜索是一种高效的查找算法,适用于在已排序的数组中查找特定元素。它的基本思想是通过不断将搜索区间对半分割,从而快速缩小…...
单片机工程师继续从事硬件设计还是涉足 Linux 开发?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!! 怎么说呢,感觉绝…...
《昇思25天学习打卡营第25天|第28天》
今天是打卡的第二十八天,实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer(ViT)简介开始了解,模型结构,模型特点,实验的环境准备和数据读取,模型解析(…...
Flutter Dio网络请求报错FormatException: Unexpected character
最近开发Flutter项目,网络请求采用的是Dio框架,在发起网络请求的时候报错: 网络请求返回的数据为: var returnCitySN {"cip": "127.0.0.1", "cid": "00", "cname": "未…...
关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)
注:另一种方式参考 关于TableField中TypeHandler属性,自定义的类型处理器的使用(密码加密与解密举例)http://t.csdnimg.cn/NZy4G 1.简介 1.1 序列化与反序列化 学习注解之前,我们可以先了解一下什么是序列化与反序列…...
第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营 <二>
第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营-CSDN博客 这里在上一篇的基础上,已经充分理解了一遍baseline的流程,并修复了一些后处理的问题,包括答案抽取,中间…...
C# 关于Linq延迟查询
demo: int Count 0;string[] obj { "item1", "item2", "item3", "item4", "item5", "item6" };var query obj.Where(item > IsTrue(item));// 第一次遍历foreach (var item in query){Console.WriteLine(it…...
Navicat For Mysql连接Mysql8.0报错:客户端不支持服务器请求的身份验证协议
windows通过navicat连接本地mysql时报错:Client does not support authentication protocol requested by server; consider upgrading MySQL client 一、问题原因二、解决方法1--失败1. 连接mysql客户端2. 修改加密方式3.正确的解决方法1.查找my.ini文件2.修改my.ini文件3.重…...
以西门子winCC为代表的组态界面,还是有很大提升空间的。
组态界面向来都是功能为主,美观和体验性为辅的,这也导致了国内的一些跟随者如法炮制,而且很多操作的工程师也是认可这重模式,不过现在一些新的组态软件可是支持精美的定制化界面,还有3D交互效果,这就是确实…...
HomeServer平台选择,介绍常用功能
平台选择 HomeServer 的性能要求不高,以下是我的硬件参数,可供参考: 硬件: 平台:旧笔记本CPU:i5 4210u内存 8G硬盘:128G 固态做系统盘,1T1T 机械盘组 RAID1 做存储。硬…...
记录一个k8s集群zookeeper部署过程
由于网管中心交维要求必须是支持高可用配置,原先单节点的zookeeper不被允许。所以在k8s集群中做了一个高可用版本的zookeeper。 期间有点小波折,官方给的镜像版本太老,业务不支持,所以手动做了下处理,重新打了一个镜像…...
TapData 信创数据源 | 国产信创数据库 TiDB 数据迁移指南,加速国产化进程,推进自主创新建设
随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国产数据库正在成为主流。长期以来,作为拥有纯国产自研背景的 TapData,自是非常重视对于更多国产信创数据库的数据连接器支持&…...
开始写人工智能
文章目录 概述 概述 开始写人工智能模块。既然决定开始写这些,那就开始吧!...
盘点.软件测试模型
软件开发模型 软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。 软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动…...
燃气安全无小事,一双专业劳保鞋让你步步安心!
燃气作为我们日常生活中不可或缺的能源之一,为我们的生活提供了极大便利,其安全性往往被忽视在忙碌的日常生活背后。然而,燃气事故一旦发生,后果往往不堪设想,轻则财产损失,重则危及生命。因此,…...
springboot校园服装租赁系统-计算机毕业设计源码30824
目 录 摘要 1 绪论 1.1 研究背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 校园服装租赁系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例…...
线性回归和逻辑回归揭示数据的隐藏模式:理论与实践全解析
机器学习之线性回归和逻辑回归 1. 简介1.1 机器学习概述1.2 监督学习的定义与重要性1.3 线性回归和逻辑回归在监督学习中的作用1.3.1 线性回归1.3.2 逻辑回归 2. 线性回归(Linear Regression)2.1 定义与目标2.1.1 回归问题的定义2.1.2 预测连续目标变量 …...
掌握采购询价软件:高效比较供应商报价的技巧
在企业运营中,获取所需的产品往往是一项复杂且耗时的任务,这涉及多个环节和流程。然而,借助电子采购询价(RFQ)系统,许多原本需要采购员手动完成的任务可以自动化运行,从而提高了效率。 那么问题…...
AMQP-核心概念-终章
本文参考以下链接摘录翻译: https://www.rabbitmq.com/tutorials/amqp-concepts 连接(Connections) AMQP 0-9-1连接通常是长期保持的。AMQP 0-9-1是一个应用级别的协议,它使用TCP来实现可靠传输。连接使用认证且可以使用TLS保护…...
在WPF中使用WebView2详解
Microsoft Edge WebView2 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎,以在本机应用中显示 web 内容。 使用 WebView2 可以在本机应用的不同部分嵌入 Web 代码&…...
AssetStudio深度解析:Unity资源逆向的底层原理与工程实践
1. 这不是“点开即用”的工具,而是Unity资源逆向的手术刀AssetStudio这个名字听起来像某个轻量级小工具——点开、拖入、导出,三步搞定。但实际用过Unity项目逆向的人都知道,它根本不是“一键提取”的魔法棒,而是一把需要你亲手调…...
05-系统技术架构师必备——软件工程方法与UML建模体系
关键词:UML建模、Scrum、敏捷开发、软件测试、白盒测试、McCabe复杂度、瀑布模型、RUPUML 软件工程 敏捷开发 软件测试 Scrum RUP 系统架构 建模系统技术架构师必备——软件工程方法与UML建模体系 摘要 UML建模和软件工程方法是系统技术架构师与开发团队沟通的"…...
当大模型遇见嵌入式MCU:RISC-V+TinyML+Agent状态机的超低功耗智能体设计(STM32H7实测待机功耗仅2.1mW)
更多请点击: https://codechina.net 第一章:AI Agent边缘计算应用 AI Agent在边缘计算场景中正从“云端智能”转向“端侧自治”,通过轻量化模型、实时推理与本地决策能力,显著降低延迟、带宽依赖与数据隐私风险。典型应用包括工业…...
餐饮门店AI Agent上线倒计时:错过Q3政策补贴窗口期,将多付47%算力成本(附工信部认证服务商名录)
更多请点击: https://kaifayun.com 第一章:餐饮门店AI Agent的核心价值与政策窗口期紧迫性 在人力成本持续攀升、消费者预期快速迭代的双重压力下,餐饮门店正面临从“经验驱动”向“智能协同”跃迁的关键拐点。AI Agent 不再是实验室概念&am…...
终极FileBrowser上手指南:10分钟掌握Web文件管理神器
终极FileBrowser上手指南:10分钟掌握Web文件管理神器 【免费下载链接】filebrowser 📂 Web File Browser 项目地址: https://gitcode.com/gh_mirrors/fi/filebrowser FileBrowser是一个功能强大的Web文件管理器,让你能够通过浏览器界面…...
免费德州扑克GTO求解器终极指南:如何用Desktop Postflop提升你的扑克决策能力
免费德州扑克GTO求解器终极指南:如何用Desktop Postflop提升你的扑克决策能力 【免费下载链接】desktop-postflop [Development suspended] Advanced open-source Texas Holdem GTO solver with optimized performance 项目地址: https://gitcode.com/gh_mirrors/…...
机器学习核函数原理与实战选型指南
1. 什么是机器学习中的核函数?它到底在解决什么问题?“Types of Kernels in Machine Learning”这个标题看起来像教科书目录里的一节,但如果你真在项目里调过SVM(kernelrbf)、用过sklearn.metrics.pairwise.rbf_kernel、或者被kernel trick这…...
linux系统之进程管理详解
进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描…...
Unity开发者为何转向VSCode:效率提升26倍的工程实践
1. 为什么我三年前就彻底卸载了Visual Studio——一个Unity老手的真实效率账在Unity项目里打开Visual Studio,等它加载完所有C#项目、符号、IntelliSense、Rider插件、Resharper缓存、NuGet包索引……这个过程平均耗时47秒——这是我用Stopwatch在2021年到2023年连续…...
MoE稀疏激活原理与实战:解密大模型高效计算的核心机制
1. 这不是“参数越多越强”的简单故事:拆解大模型里那个被悄悄藏起来的“开关”你肯定见过这类标题:“GPT-4 参数量突破1.8万亿!”、“DeepSeek-R1 达到6710亿参数!”——光看数字,像在比谁家粮仓堆得更高。但真正懂行…...
