Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
C++怎么实现一个二分查找_C++在有序数组中高效查找元素的算法_创想鸟

C++怎么实现一个二分查找_C++在有序数组中高效查找元素的算法

二分查找在有序数组中通过不断缩小搜索区间定位目标值,时间复杂度为O(log n)。可采用循环或递归实现:循环方式效率高,避免函数调用开销;递归方式逻辑清晰,便于理解。C++标准库提供std::binary_search、std::lower_bound和std::upper_bound等函数,推荐优先使用以提升开发效率与安全性。手动实现有助于理解原理,但需确保数组有序,否则结果不可预测。

c++怎么实现一个二分查找_c++在有序数组中高效查找元素的算法

二分查找是一种在有序数组中快速定位目标值的高效算法,时间复杂度为 O(log n)。C++ 中可以通过循环或递归方式手动实现,也可以借助标准库函数完成。

基本原理

二分查找的核心思想是每次将搜索区间缩小一半:

设定左边界 left 和右边界 right计算中间位置 mid = left + (right – left) / 2(避免整数溢出)比较 arr[mid] 与目标值: 相等:找到目标,返回索引小于目标:搜索右半部分,left = mid + 1大于目标:搜索左半部分,right = mid – 1重复直到区间为空(未找到)

循环实现二分查找

使用 while 循环实现更高效,避免函数调用开销:

int binarySearch(int arr[], int size, int target) {    int left = 0;    int right = size - 1;
while (left <= right) {    int mid = left + (right - left) / 2;    if (arr[mid] == target) {        return mid; // 返回下标    } else if (arr[mid] < target) {        left = mid + 1;    } else {        right = mid - 1;    }}return -1; // 未找到

}

立即学习“C++免费学习笔记(深入)”;

递归实现方式

递归写法逻辑清晰,适合理解算法流程:

int binarySearchRecursive(int arr[], int left, int right, int target) {    if (left > right) {        return -1;    }
int mid = left + (right - left) / 2;if (arr[mid] == target) {    return mid;} else if (arr[mid] < target) {    return binarySearchRecursive(arr, mid + 1, right, target);} else {    return binarySearchRecursive(arr, left, mid - 1, target);}

}

立即学习“C++免费学习笔记(深入)”;

使用 C++ 标准库

STL 提供了多个现成的二分查找工具,推荐在实际开发中优先使用:

std::binary_search:判断元素是否存在std::lower_bound:返回第一个不小于目标值的迭代器std::upper_bound:返回第一个大于目标值的迭代器

示例代码:

#include #include 

std::vector nums = {1, 3, 5, 7, 9};

// 检查是否存在bool found = std::binary_search(nums.begin(), nums.end(), 5);

// 获取位置auto it = std::lower_bound(nums.begin(), nums.end(), 5);if (it != nums.end() && *it == 5) {int index = it - nums.begin();}

基本上就这些。手动实现有助于理解原理,标准库则更安全高效。注意前提是数组必须有序,否则结果不可预测。

以上就是C++怎么实现一个二分查找_C++在有序数组中高效查找元素的算法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1485066.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
C++如何使用OpenGL绘制一个三角形_C++图形渲染基础与OpenGL三角形绘制
上一篇 2025年12月19日 08:36:52
C++怎么实现一个四叉树/八叉树_C++空间数据索引与碰撞检测中的数据结构
下一篇 2025年12月19日 08:37:01

相关推荐

  • WPS Office 2019怎么删除所有空白表单-WPS Office 2019把删除所有空白表单的方法

    WPS Office 2019怎么删除所有空白表单-WPS Office 2019把删除所有空白表单的方法WPS Office 2019怎么删除所有空白表单-WPS Office 2019把删除所有空白表单的方法WPS Office 2019怎么删除所有空白表单-WPS Office 2019把删除所有空白表单的方法WPS Office 2019怎么删除所有空白表单-WPS Office 2019把删除所有空白表单的方法

    wps office 2019是由金山软件开发的一款高效、简洁且功能齐全的国产办公软件,集成了文字处理、电子表格和演示文稿三大核心模块。该软件具备出色的微软office文件格式兼容能力,全面支持.docx、.xlsx、.pptx等常用格式的打开、编辑与保存,确保用户在不同平台间无缝切换。界面采用现代…

    2026年10月5日 • 用户投稿
    000
  • 【工具】这 4 款实用小工具,能让你的电脑变得好用又骚气。

    【工具】这 4 款实用小工具,能让你的电脑变得好用又骚气。【工具】这 4 款实用小工具,能让你的电脑变得好用又骚气。【工具】这 4 款实用小工具,能让你的电脑变得好用又骚气。【工具】这 4 款实用小工具,能让你的电脑变得好用又骚气。

    在日常生活中,我们常常会遇到一些重复且繁琐的工作,这些任务不仅容易让人感到烦躁,还严重影响我们的工作效率。 其实,我们完全可以通过一些工具来提高效率,为自己节省大量时间去做其他事情。 今天世超再次为大家推荐4个在Windows平台上免费的小工具。 不要小看这些工具,它们都是迟早会用得上的好东西。 1…

    2026年10月5日 • 用户投稿
    000
  • Win10系统更换主板之后怎么激活系统?

    Win10系统更换主板之后怎么激活系统?Win10系统更换主板之后怎么激活系统?Win10系统更换主板之后怎么激活系统?Win10系统更换主板之后怎么激活系统?

    最近有用户向小编反映,自己的电脑主板损坏了,在更换了相同型号的主板后,系统提示需要重新激活,但使用激活码却无法完成激活操作,尝试输入 slui 4 命令时,没有任何响应,界面也没有弹出。这是因为当你对设备进行重大硬件改动(如更换主板)后,系统中的windows可能会失去激活状态。 解决步骤如下: 一…

    2026年10月5日 • 用户投稿
    100
  • Java System.out.printf 中正确嵌入字符串的指南

    Java System.out.printf 中正确嵌入字符串的指南Java System.out.printf 中正确嵌入字符串的指南Java System.out.printf 中正确嵌入字符串的指南Java System.out.printf 中正确嵌入字符串的指南

    本文详细介绍了在 Java 中使用 System.out.printf 进行格式化输出时,如何正确地嵌入和显示字符串。主要探讨了两种有效方法:一是利用 %s 格式说明符作为字符串的占位符,适用于动态字符串;二是直接将静态字符串文本嵌入到格式字符串中。文章还指出了常见的错误用法,并提供了清晰的代码示例…

    2026年10月5日 • 用户投稿
    300
  • VSCode如何配置TypeScript开发环境 VSCode搭建TypeScript项目的详细教程

    配置typescript开发环境是必要的,因为它能提供类型安全、提升开发效率、支持现代javascript特性、增强代码可维护性,并与成熟生态系统集成;2. 优化tsconfig.json需关注目标环境与模块系统(如target和module)、开启严格模式(strict: true)、合理设置输出…

    2026年10月5日
    300
  • composer global require安装的包找不到命令如何解决

    composer global require安装的包找不到命令如何解决composer global require安装的包找不到命令如何解决composer global require安装的包找不到命令如何解决composer global require安装的包找不到命令如何解决

    答案是未将Composer全局vendor/bin目录添加到系统PATH环境变量。需通过composer config –global –absolute ‘home’确认路径,再将对应bin目录加入PATH,最后重启终端验证命令是否生效。 使用 co…

    2026年10月5日 • 用户投稿
    100
  • 如何使用MySQL在C#中实现数据更新操作

    如何使用mysql在c#中实现数据更新操作 MySQL是一种广泛使用的关系型数据库,它提供了强大的数据管理和查询功能。在C#开发中,我们常常需要将数据存储到MySQL中,并且在需要的时候更新数据。本文将介绍如何使用MySQL和C#实现数据更新操作,同时提供相应的代码示例。 步骤一:安装MySQL C…

    2026年10月5日
    100
  • 如何用Java解析URL中的参数 Java获取请求参数的方法解析

    如何用Java解析URL中的参数 Java获取请求参数的方法解析如何用Java解析URL中的参数 Java获取请求参数的方法解析如何用Java解析URL中的参数 Java获取请求参数的方法解析如何用Java解析URL中的参数 Java获取请求参数的方法解析

    在java中解析url参数或获取http请求参数主要分两种场景:一是通过httpservletrequest处理web请求中的参数,二是手动解析纯url字符串。对于web应用,可通过request.getparameter(“paramname”)获取单个参数值;使用requ…

    2026年10月5日 • 用户投稿
    100
  • 如何分析并减少Composer vendor目录的体积?

    如何分析并减少Composer vendor目录的体积?如何分析并减少Composer vendor目录的体积?如何分析并减少Composer vendor目录的体积?如何分析并减少Composer vendor目录的体积?

    首先分析 vendor 目录体积构成,使用 du 和 depstat 识别大体积依赖;接着移除未用包、区分生产与开发依赖、启用 autoloader 优化及清理 VCS 元数据;最后通过 CI 监控和定期审查依赖树实现持续维护,确保部署效率与资源节约。 Composer 的 vendor 目录体积过…

    2026年10月5日 • 用户投稿
    200
  • 如何隐藏电脑系统托盘图标

    如何隐藏电脑系统托盘图标如何隐藏电脑系统托盘图标如何隐藏电脑系统托盘图标如何隐藏电脑系统托盘图标

    如今,电脑已深入千家万户,成为人们工作和生活中必不可少的工具。为了更好地满足个人使用习惯,我们可以对电脑进行多种个性化设置,例如更换桌面壁纸、调整图标排列方式、创建常用程序快捷方式等。本文将介绍一个实用的小技巧:如何隐藏系统托盘中的图标,从而让任务栏界面更加整洁,提升整体操作体验。 1、 在桌面的空…

    2026年10月5日 • 用户投稿
    200
  • Win10系统如何启用纯命令行模式?

    Win10系统如何启用纯命令行模式?Win10系统如何启用纯命令行模式?Win10系统如何启用纯命令行模式?Win10系统如何启用纯命令行模式?

    熟悉windows的用户都知道,相较于dos,windows的一大优势在于其直观的图形化操作界面,这让操作变得更加便捷。然而,对于打算搭建nas但又不熟悉其他系统的用户来说,windows也是一个不错的选择。不过,windows自带的文件资源管理器会占用较多的内存和cpu资源,这可能会成为一种负担。…

    2026年10月5日 • 用户投稿
    100
  • 集成VSCode实时团队编程统计与效率分析面板

    通过集成VSCode与WakaTime插件,实时统计团队编码时长、活跃时段和文件贡献,并结合Grafana等工具搭建可视化面板,联动Jira、Git和CI/CD系统实现多维效率分析,同时注重隐私保护与正向激励,助力科学决策与持续提效。 想实时掌握团队在 VSCode 中的编程活动并提升开发效率,光靠…

    2026年10月5日
    100
  • Linux auditd命令配置与使用方法

    auditd是Linux审计核心工具,通过配置/etc/audit/auditd.conf设置日志路径、大小及磁盘预警,使用-w监控文件访问、-a定义系统调用和用户行为规则,结合-k标记事件,规则持久化至/etc/audit/rules.d/audit.rules,通过ausearch查询、aure…

    2026年10月5日
    100
  • WPS格式文件损坏了如何修复_WPS格式文件损坏修复与恢复步骤

    WPS格式文件损坏了如何修复_WPS格式文件损坏修复与恢复步骤WPS格式文件损坏了如何修复_WPS格式文件损坏修复与恢复步骤WPS格式文件损坏了如何修复_WPS格式文件损坏修复与恢复步骤WPS格式文件损坏了如何修复_WPS格式文件损坏修复与恢复步骤

    首先使用WPS内置修复功能尝试自动修复损坏文件,若无效则通过另存为其他格式提取内容;检查备份中心或本地是否存在.bak等备份文件进行恢复;将.wpsx文件重命名为.zip并解压,手动提取document.xml中的文本内容;最后可借助Stellar Repair等第三方工具深度修复严重损坏的文档。 …

    2026年10月5日 • 用户投稿
    400
  • 如何在Java中使用for循环 Java for循环语法与用法

    如何在Java中使用for循环 Java for循环语法与用法如何在Java中使用for循环 Java for循环语法与用法如何在Java中使用for循环 Java for循环语法与用法如何在Java中使用for循环 Java for循环语法与用法

    java中的for循环是程序设计中基础而强大的结构,主要用于重复执行代码块。1.for循环的基本语法由三部分组成:初始化、终止条件和步进,三者用分号隔开;2.增强型for循环(foreach)适用于遍历数组或集合,语法简洁且避免索引错误,但无法修改元素或获取索引;3.break用于立即终止循环,co…

    2026年10月5日 • 用户投稿
    100
  • 为什么苹果电脑屏幕显示模糊?调整分辨率与检查显示器

    为什么苹果电脑屏幕显示模糊?调整分辨率与检查显示器为什么苹果电脑屏幕显示模糊?调整分辨率与检查显示器为什么苹果电脑屏幕显示模糊?调整分辨率与检查显示器为什么苹果电脑屏幕显示模糊?调整分辨率与检查显示器

    首先调整显示器至原生分辨率,进入系统偏好设置→显示器→缩放,选择标有“默认”或最高数值的分辨率;其次检查连接线缆是否插紧、有无损坏,必要时更换线缆或直连Mac排除转接头干扰;最后通过显示器设置中的颜色标签页校准色彩,选择匹配的配置文件或运行校准向导优化亮度与对比度,提升清晰度。 如果您发现苹果电脑屏…

    2026年10月5日 • 用户投稿
    500
  • 如何在Java中使用Lambda表达式 Java Lambda语法和案例

    如何在Java中使用Lambda表达式 Java Lambda语法和案例如何在Java中使用Lambda表达式 Java Lambda语法和案例如何在Java中使用Lambda表达式 Java Lambda语法和案例如何在Java中使用Lambda表达式 Java Lambda语法和案例

    lambda表达式通过简化匿名内部类的冗余代码来提升java代码的简洁性和可读性,其核心语法结构为(parameters) -> expression 或 (parameters) -> { statements; }。它用于实现函数式接口,尤其在集合操作、并发编程和事件处理中广泛应用,…

    2026年10月5日 • 用户投稿
    000
  • Mac截图全攻略,轻松掌握

    Mac截图全攻略,轻松掌握Mac截图全攻略,轻松掌握Mac截图全攻略,轻松掌握Mac截图全攻略,轻松掌握

    1、 打开App Store,在搜索栏中输入“snip”,找到应用后点击获取按钮,系统将自动完成安装过程。 2、 安装完成后,可通过Launchpad或前往Finder中的应用程序文件夹来启动Snip工具。 轻松鲨 与AI连续对话聊天提问,多场景50+文案写作模板,AI智能生成思维导图 32 查看详…

    2026年10月5日 • 用户投稿
    100
  • iPad分屏如何自定义快捷键_iPad分屏快捷操作设置教程

    iPad分屏如何自定义快捷键_iPad分屏快捷操作设置教程iPad分屏如何自定义快捷键_iPad分屏快捷操作设置教程iPad分屏如何自定义快捷键_iPad分屏快捷操作设置教程iPad分屏如何自定义快捷键_iPad分屏快捷操作设置教程

    iPad分屏核心逻辑是基于手势、Dock栏和多任务菜单的直观交互,通过拖拽应用实现分屏或浮窗,系统记忆常用组合并提供多任务切换器管理,强调直接操作而非键盘快捷键。 iPadOS在分屏操作上,并没有提供传统意义上的“自定义快捷键”功能,比如像macOS那样通过键盘组合键直接呼出特定分屏布局。它的核心逻…

    2026年10月5日 • 用户投稿
    000
  • 如何使用Java解析JSON Java JSON处理库的用法

    如何使用Java解析JSON Java JSON处理库的用法如何使用Java解析JSON Java JSON处理库的用法如何使用Java解析JSON Java JSON处理库的用法如何使用Java解析JSON Java JSON处理库的用法

    在java中解析json的最直接有效方法是使用jackson或gson等成熟库。1. 引入库依赖,如jackson的jackson-databind;2. 定义与json结构对应的java pojo类;3. 使用objectmapper类进行序列化与反序列化操作。相比手动解析,使用库能避免语法错误、…

    2026年10月5日 • 用户投稿
    300

发表回复

登录后才能评论
关注微信