当前位置: 首页 > news >正文

数据结构——冒泡排序 - 教程

冒泡排序

在交换排序中,冒泡排序是最直观的一种,它经过相邻元素的两两比较和交换,让值较大的元素像水中的气泡一样逐步“上浮”到数组末尾,最终实现整个数组的有序排列。这种排序方式的核心是“逐趟筛选最大元素”,每完成一趟排序,就有一个最大元素被固定在正确的位置,后续排序无需再处理该元素。

1. 冒泡排序的核心思想与执行流程

冒泡排序的核心逻辑可能概括为“相邻比较、逆序交换、逐趟上浮”:

我们以数组arr = {49, 38, 65, 97, 76, 13, 27, 49}为例,详细展示冒泡排序的每一趟执行过程:

2. 冒泡排序的代码实现(带优化)

通过为了避免数组已有序时仍进行多余趟次的比较,我们能够添加一个“交换标志”(flag):若某一趟排序中没有发生交换,则直接终止排序。以下是优化后的C语言达成,代码精简且注释详细:

void BubbleSort(int arr[], int n) {
int i, j, flag; // flag=1表示有交换,0表示无交换
for (i = 0; i < n-1; i++) { // 最多需n-1趟(每趟固定一个元素)
flag = 0; // 初始化为无交换
for (j = 0; j < n-1-i; j++) { // 未排序部分:0~n-1-i
if (arr[j] > arr[j+1]) { // 相邻元素逆序,交换
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = 1; // 标记有交换
}
}
if (flag == 0) break; // 无交换,数组已有序,提前终止
}
}

代码说明:

  • 外层循环i控制排序趟次,最多执行n-1趟(每趟固定一个最大元素);
  • 内层循环j遍历未排序部分(范围0~n-1-i,因每趟后已排序部分增加1个元素);
  • 交换标志flag:若某趟无交换(flag=0),说明数组已完全有序,直接跳出循环,避免多余计算。
3. 冒泡排序的性能与特性
  • 时间复杂度

    • 最好情况(数组已完全有序):仅需1趟排序,无交换,时间复杂度为O(n)
    • 最坏情况(数组完全逆序):需n-1趟排序,每趟比较n-1-i次,总比较次数为n(n-1)/2,时间复杂度为O(n²)
    • 平均情况:时间复杂度为O(n²)
  • 空间复杂度:仅需一个临时变量(temp)和交换标志(flag),空间复杂度为O(1),属于“原地排序”。

  • 稳定性:当相邻元素值相等时(如示例中的两个49),不会发生交换,因此相同元素的相对顺序不会改变,冒泡排序是稳定的排序算法。

4. 适用场景

冒泡排序适合以下场景:

综上,冒泡排序是一种逻辑直观、实现简单的交换排序算法,核心是通过相邻元素的比较与交换逐步筛选最大元素。虽然平均时间复杂度为O(n²),但通过“交换标志”的优化,在基本有序数组上能表现出较高效率,且具备稳定、原地排序的优势,是学习交换排序思想的基础。

http://www.jsqmd.com/news/290519/

相关文章:

  • 机械制造ToB企业获客困境与数字化解决方案架构深度解析
  • Java毕设项目:基于springboot的二次元商品商城系统(源码+文档,讲解、调试运行,定制等)
  • Java计算机毕设之基于SpringBoot + Vue的电子产品手机数码销售系统基于springboot的电子产品电子外设销售系统(完整前后端代码+说明文档+LW,调试定制等)
  • 【毕业设计】基于springboot的二次元商品商城系统(源码+文档+远程调试,全bao定制等)
  • 【课程设计/毕业设计】基于springboot的电子产品销售系统基于springboot的电子产品电子外设销售系统【附源码、数据库、万字文档】
  • 【课程设计/毕业设计】基于SpringBoot与Vue的动漫周边商场系统设计与实现基于springboot的二次元商品商城系统【附源码、数据库、万字文档】
  • MyEMS开源能源管理系统:赋能生物化学农药及微生物农药制造业绿色低碳转型
  • 开源驱动零碳实践:MyEMS 赋能零碳工厂建设的核心路径
  • 服装加工ERP系统是什么?它能为企业带来哪些效率提升?
  • 【工具变量】全国地级市文旅融合DID数据集(2008-2025年)
  • 10399_基于SpringBoot的智慧养老院管理系统
  • 诺斯罗普·格鲁曼加速辐射测试
  • 代码源挑战赛 Round 47
  • 26年1月23算法
  • 编辑标题
  • Java数据结构*Map和 Set*
  • Java毕设选题推荐:基于springboot的电子产品电子外设销售系统基于springboot的电子产品销售系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设选题推荐:基于springboot的动漫周边商城的设计与实现基于springboot的二次元商品商城系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 施耐德 KNX 系统赋能国家储能大厦:智能能源管理与 ESG 解决方案实践
  • Java毕设项目推荐-基于springboot的二次元商品购物商城系统基于springboot的二次元商品商城系统【附源码+文档,调试定制服务】
  • 花 6888 元拿下 PMP证书!到底是报班还是自学?
  • 导师严选2026 TOP8 AI论文写作软件:研究生开题报告神器测评
  • Java毕设项目推荐-基于SpringBoot+Vue的宠物咖啡馆平台管理系统基于springboot的宠物咖啡平台管理系统【附源码+文档,调试定制服务】
  • 【计算机毕业设计案例】基于springboot的宠物咖啡平台管理系统基于SpringBoot+Vue的宠物咖啡馆平台管理系统(程序+文档+讲解+定制)
  • 【计算机毕业设计案例】基于springboot的电子产品电子外设销售系统基于SpringBoot + Vue的手机电脑相机电子产品销售系统(程序+文档+讲解+定制)
  • 【计算机毕业设计案例】基于springboot的二次元商品商城系统基于springboot的二次元商品购物商城系统(程序+文档+讲解+定制)
  • 救命神器10个AI论文平台,本科生搞定毕业论文!
  • 清华公开课去哪儿看?北大公开课去哪儿看?抖音精选平台
  • 清北公开课在哪里看
  • AI驱动的技术栈演进建议:数据支持下的技术决策