全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-690-7320

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;
<pre class='brush:php;toolbar:false;'>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; // 未找到

}

小云雀 小云雀

剪映出品的AI视频和图片创作助手

小云雀 1949 查看详情 小云雀

递归实现方式

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

int binarySearchRecursive(int arr[], int left, int right, int target) {
    if (left > right) {
        return -1;
    }
<pre class='brush:php;toolbar:false;'>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++ 标准库

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

  • std::binary\_search:判断元素是否存在
  • std::lower\_bound:返回第一个不小于目标值的迭代器
  • std::upper\_bound:返回第一个大于目标值的迭代器

示例代码:

#include <algorithm>
#include <vector>
<p>std::vector<int> nums = {1, 3, 5, 7, 9};</p><p>// 检查是否存在
bool found = std::binary_search(nums.begin(), nums.end(), 5);</p><p>// 获取位置
auto it = std::lower_bound(nums.begin(), nums.end(), 5);
if (it != nums.end() && *it == 5) {
int index = it - nums.begin();
}</p>

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

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


# 工具  # 松原seo公司推荐地址  # 炸鸡外卖推广营销策划书  # seo大神收入  # 未找到  # 多路  # 管理机制  # 如何实现  # 是否存在  # 何为  # 第一个  # 都是  # 组中  # 递归  # 标准库  # c++  # go  # 企业号推广营销  # 网站建设课程表  # 井陉品牌网站建设招标  # 浙江企业网站建设作用  # 论文审稿网站建设要求  # 线上营销推广计划怎么写  # 专业网站建设制作多少钱 


相关文章: c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  如何使 Jest 模拟函数默认抛出错误以提高测试效率  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  Excel Power Pivot如何处理XML数据源 构建高级数据模型  神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  必由学在线入口 必由学网页版快速登录入口  火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧  win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】  如何将HTML表格多行数据保存到Google Sheets  快手极速版在线观看 官方网页版登录地址  QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口  抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站  抖音网页版企业服务中心登录入口_抖音网页版企业登录平台  解决J*aScript中重复选择项的确认对话框显示问题  LINUX怎么安装MySQL_LINUX数据库安装配置教程  微信商城在哪里打开【步骤】  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  聚水潭ERP登录页面入口 聚水潭ERP官网登录界面  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  处理嵌套交互式控件:前端可访问性指南  响应式容器内容自动缩放与宽高比维持教程  qq游戏手机版下载安装_qq游戏移动端入口  J*a TimerTask中HashMap意外清空的深层原因与解决方案  在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全  抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  绝地鸭卫平a核爆刀流玩法攻略  Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突  CSS实现侧边栏导航项全宽圆角悬停背景效果  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧  极速漫画官方主页网址 极速漫画漫画在线浏览官网链接  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  Python Sounddevice 音频卡顿问题解析与队列数据安全处理  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  网站内容防复制粘贴的实现策略与局限性  b站如何看历史记录_b站观看历史找回方法  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  处理动态列数据:J*a ArrayList的正确初始化与字符累加教程  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  Win11怎么关闭快速启动_Win11彻底关机设置教程  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  解决Flask中Quill编辑器内容提交失败及TypeError的指南  在WordPress中通过REST API访问受BasicAuth保护的站点内容 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。