0

0

c++中如何实现冒泡排序优化_c++带标志位的冒泡算法【汇总】

穿越時空

穿越時空

发布时间:2026-01-16 16:57:08

|

720人浏览过

|

来源于php中文网

原创

普通冒泡排序在已排序数组上仍需O(n²)时间,因其无提前终止机制;优化版引入swapped标志位,每轮重置为false,若未交换则提前退出。

c++中如何实现冒泡排序优化_c++带标志位的冒泡算法【汇总】

为什么普通冒泡排序在已排序数组上仍要 O(n²) 时间

因为标准实现没有提前终止机制:即使输入已是升序,它仍会完整执行 n-1 轮比较,每轮都遍历剩余未排序段。时间复杂度退化为最坏情况,实际运行毫无必要。

带标志位的冒泡排序怎么写(C++ 基础版)

核心是引入布尔变量 swapped,每轮开始置为 false,只要发生一次交换就设为 true;若某轮结束仍为 false,说明全程无交换 → 数组已有序,直接跳出循环。

XPack
XPack

全球首个开源的MCP交易平台

下载
void bubble_sort_optimized(std::vector& arr) {
    int n = arr.size();
    for (int i = 0; i < n - 1; ++i) {
        bool swapped = false;
        for (int j = 0; j < n - 1 - i; ++j) {
            if (arr[j] > arr[j + 1]) {
                std::swap(arr[j], arr[j + 1]);
                swapped = true;
            }
        }
        if (!swapped) break;
    }
}

边界与性能要注意的三个细节

  • n 时应直接返回,避免空循环或越界访问
  • 内层循环上限用 n - 1 - i 而非 n - i:第 i 轮后,末尾 i 个元素已就位,无需再比
  • 标志位必须在每轮**开头重置**为 false,否则会继承上一轮状态,导致提前退出

什么时候该换别的排序算法

即使加了标志位,冒泡排序最坏和平均时间复杂度仍是 O(n²),且常数因子大。真实项目中:
– 小数组(n )可接受,但 std::sort 通常更快(introsort 实现)
– 中等以上规模必须换 std::sort 或手写快排/归并
– 若需稳定且原地,可考虑插入排序(对小数组或基本有序数据更优)

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

385

2023.09.04

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

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

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

热门下载

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

精品课程

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

共578课时 | 46.5万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

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

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