0

0

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

冰火之心

冰火之心

发布时间:2025-11-20 16:10:40

|

595人浏览过

|

来源于php中文网

原创

二分查找在有序数组中通过不断缩小搜索区间定位目标值,时间复杂度为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] zuojiankuohaophpcn target) {
        left = mid + 1;
    } else {
        right = mid - 1;
    }
}

return -1; // 未找到

}

标小兔AI写标书
标小兔AI写标书

一款专业的标书AI代写平台,提供专业AI标书代写服务,安全、稳定、速度快,可满足各类招投标需求,标小兔,写标书,快如兔。

下载

立即学习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] zuojiankuohaophpcn 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(); }

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

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

88

2023.09.25

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

402

2023.08.14

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

1

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.8万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号