C++如何实现冒泡排序算法?C++经典排序算法入门【数据结构】


冒泡排序是C++入门必学的排序算法,通过重复遍历数组、两两比较并交换相邻元素,使较大元素逐轮“浮”至末尾,实现升序排列;支持模板泛化,时间复杂度最坏O(n²),最好O(n),稳定且空间复杂度为O(1)。

冒泡排序是C++入门必学的排序算法,原理简单、逻辑清晰,适合理解排序的基本思想。它通过重复遍历待排序数组,比较相邻元素并交换位置,让较大(或较小)的元素像气泡一样逐渐“浮”到一端。

核心思路:两两比较,逐轮下沉

每一轮遍历中,从第一个元素开始,依次比较相邻两个数;如果顺序错误(比如升序时前一个比后一个大),就交换它们。这样每轮结束,当前未排序部分的最大值就会被“冒泡”到末尾。重复这个过程,直到没有交换发生,说明已排好序。

基础实现(升序排列)

以下是一个标准、易懂的C++实现:

  // 冒泡排序函数(升序)
  void bubbleSort(int arr[], int n) {
    for (int i = 0; i       bool swapped = false;                        // 优化:记录是否发生交换
      for (int j = 0; j         if (arr[j] > arr[j + 1]) {
          std::swap(arr[j], arr[j + 1]);
          swapped = true;
        }
      }
      if (!swapped) break;                         // 提前退出:已有序
    }
  }

关键细节与常见优化

  • 边界控制:内层循环上限用 n - 1 - i,因为每轮后末尾 i 个元素已就位,无需再比
  • 提前终止:引入 swapped 标志,若某轮无交换,说明整体已有序,直接退出
  • 稳定性:冒泡排序是稳定排序——相等元素不会因交换而改变相对位置
  • 时间复杂度:最坏/平均 O(n²),最好(已排序)O(n);空间复杂度 O(1)

扩展:支持任意类型(模板写法)

用模板泛化,让函数能处理 doublestring 或自定义类(需支持 ):

  template
  void bubbleSort(T arr[], int n) {
    for (int i = 0; i       bool swapped = false;
      for (int j = 0; j         if (arr[j] > arr[j + 1]) {
          std::swap(arr[j], arr[j + 1]);
          swapped = true;
        }
      }
      if (!swapped) break;
    }
  }

基本上就这些。掌握冒泡排序,不单是为了排序本身,更是为理解后续快排、归并等算法打下逻辑基础。


# app  # c++  # 排序算法  # 排列  # 冒泡排序  # String  # if  # for  # break  # bool  # int  # double  # void  # 循环  # 数据结构  # 算法  # 升序  # 遍历  # 最坏  # 是一个  # 就会  # 第一个  # 自定义  # 较小  # 是为了  # arr 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Windows如何设置登录时的欢迎屏幕背景?(锁屏界面)  Win11怎么设置默认浏览器Chrome_Windows11修改默认网页打开方式  如何提升Golang程序I/O性能_Golang I/O密集型程序优化示例  php怎么下载安装后测试是否成功_简单脚本验证方法【操作】  Win11怎样安装网易云音乐_Win11安装网易云教程【步骤】  Win11右键反应慢怎么办 Win11优化右键菜单加载速度【技巧】  Windows Defender扫描失败怎么办_安全模块损坏修复方式  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  Python文件操作优化_大文件与流处理解析【教程】  如何使用Golang搭建本地API测试环境_快速验证接口功能  Windows11怎么自定义任务栏_Windows11任务栏自定义教程【步骤】  Win11如何设置开机自动联网 Win11宽带连接自动拨号【步骤】  Python网页解析流程_html结构说明【指导】  Go 中实现 Python urllib.quote() 等效功能的正确方式  Win11怎么设置桌面图标间距_Windows11注册表IconSpacing修改  Win11怎么开启专注模式_Windows11时钟应用Focus Session  如何在Golang中指定模块版本_使用go.mod控制版本号  Win10怎么卸载爱奇艺_Win10彻底卸载爱奇艺方法【步骤】  Windows10如何更改日期格式_Win10区域设置短日期修改  Win11怎么设置ipv4地址_Windows 11固定静态IP地址配置教程【详解】  Python函数参数高级用法_默认值与可变参数解析【教程】  如何在Golang中定义接口_抽象方法和多态实现  php订单日志怎么记录评价_php记录订单评价日志方法【方法】  c++中如何进行二进制文件读写_c++ read与write函数用法  Win11任务栏天气怎么关闭 Win11隐藏天气小组件图标【设置】  Windows10如何更改任务栏高度_Win10解除锁定调整大小  Win10怎样卸载iTunes_Win10卸载iTunes步骤【步骤】  Win11怎么设置默认邮件应用_Windows11应用关联Mail设置  Win11怎么关闭防火墙通知_屏蔽Win11安全中心安全警告弹窗【技巧】  Python对象生命周期管理_创建销毁说明【指导】  如何在 PHP 单元测试中正确模拟带方法的图像处理门面(Facade)  Win11怎么开启空间音效_Windows11耳机杜比音效与Sonic设置  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  Windows蓝屏错误0x00000023怎么修复_FAT文件系统错误处理  如何在Golang中写入XML文件_生成符合规范的XML数据  Win11怎么关闭系统推荐内容_Windows11开始菜单布局设置  Python数据挖掘进阶教程_分类回归与聚类案例解析  Python爬虫项目实战教程_Scrapy抓取与存储数据实例  Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新  Win11相机打不开提示错误怎么修_相机权限开启与驱动修复【影像修复】  Win11怎么设置夜间模式_Windows11显示设置蓝光过滤强度  Python包结构设计_大型项目组织解析【指导】  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  php怎么操作Redis_Redis扩展连接与基本命令使用方法【方法】  phpstudy本地环境mysql忘记密码_重置mysqlroot密码操作流程【解答】  Win10如何卸载WindowsDefender_Win10卸载Defender教程【方法】  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  手机php文件怎么变成mp4_安卓苹果打开php转mp4方法【教程】  c++中的std::conjunction和std::disjunction是什么_c++模板元编程逻辑运算【C++17】  Win11如何隐藏桌面图标 Win11一键隐藏/显示桌面图标【指南】 

 2025-12-26

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.