冒泡排序是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

算法步骤

从头开始比较相邻的元素,如果第一个比第二个大,就交换它俩,比较完这两个之后,比较下两个,直到待排序序列比较完,此时序列的最后一个元素将会是最大的元素,该元素也就排好位置了,然后待排序序列向左收缩,重新从头开始比较相邻元素,依此类推。

动图演示

静图演示

代码实现

普通

void BubbleSort(int* a, int n){for(int i = 0; i < n - 1; i++){for(int j = 0; j < n - 1 - i; j++){if(a[j] > a[j + 1]){Swap(&a[j], &a[j + 1]);}}}
}

升级

冒泡排序每趟排序都会遍历完整个未排序序列,而如果在某一次遍历完之后,发现该遍历过程中没有进行数据交换,则表明该序列已有序,但此时冒泡排序并不会停止下来,所以我们建立一个flag,当发现遍历完之后没有发生数据交换则直接break退出冒泡排序。

void BubbleSort(int* a, int n){for(int i = 0; i < n - 1; i++){int flag = 1;for(int j = 0; j < n - 1 - i; j++){if(a[j] > a[j + 1]){Swap(&a[j], &a[j + 1]);flag = 0;}}if(flag){break;}}
}

复杂度、稳定性分析

  1. 时间复杂度

    普通版本的时间复杂度为O(N2)O(N^{2})O(N2)

    升级版本的最优时间复杂度为O(N)O(N)O(N)

    最差时间复杂度为O(N2)O(N^{2})O(N2)

  2. 空间复杂度

    仅仅使用了常数个辅助单元,空间复杂度是O(1);

  3. 稳定性

    冒泡排序,不会改变相同元素的相对顺序,所以是稳定的。

冒泡排序超详细讲解C语言相关推荐

  1. 超详细讲解C语言入门函数(一)

    解析已经很详细了,可以说相当入门级别了,如果喜欢的话那就请支持一下,后续会继续更新~ 代码网上搜索,并加以更改,侵权请联系删除,谢谢~ 部分例子没有详细解释是因为前面的例子已经说过了 3×4矩阵求最大 ...

  2. 插入排序超详细讲解C语言

    文章目录 算法步骤 动图演示 静图演示 代码实现 复杂度.稳定性分析 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法步骤 将第一待排序序列 ...

  3. 选择排序超详细讲解C语言

    文章目录 算法步骤 动图演示 静图演示 代码实现 普通 升级 复杂度.稳定性分析 选择排序是一种简单直观的排序算法,无论数据是否有序,该排序的时间复杂度恒为 O(N2)O(N^{2})O(N2),所以 ...

  4. Python的零基础超详细讲解(第五天)-Python的运算符

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  5. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  6. stm32f103利用HC06进行蓝牙通信,在7针的OLED屏幕上显示,带数据更新功能(带超详细讲解)

    stm32f103利用HC06进行蓝牙通信,在7针的OLED屏幕上显示,带数据更新功能(带超详细讲解) 首先看看效果吧 手机端发送一个数据在OLED屏幕上显示 其实蓝牙通信就是个蓝牙转串口的过程,手机 ...

  7. Java基础18-String类【String类的特点对象个数常用方法】【超详细讲解】

    Java基础-String类[超详细讲解] String类的特点 String在java.lang.String包中 1:特点 (1)String类型不能被继承,因为由final修饰 (2)Strin ...

  8. react的超详细讲解

    create-react-app 项目目录 在HTML中使用react 1 2 3基础 React的注意事项 模拟的React 和 render React组件 函数组件 类组件 React 的数据源 ...

  9. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  10. Python的零基础超详细讲解(第十二天)-Python函数及使用

    基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...

最新文章

  1. 270个开源项目,总计24w星,帮你快速找代码
  2. 企业高管眼中的 SAP 和「智慧企业」| 品读中国企业数字化转型的故事
  3. PHP 出现 502 解决方案
  4. Vision Transformer 论文
  5. 【Quartz】Spring3.2.9 + Quqrtz2.2.1 实现定时实例
  6. 【ANSYS命令流】Workbench中施加流体渗透压力载荷(超详细)
  7. 广州地铁的速度与激情
  8. php 相似文章,PHP TF-IDF与余弦相似性计算文章相似性
  9. 深入医疗PACS影像融合存储解决方案
  10. 震惊!你可能下了个假的抢红包神器
  11. Good Luck in CET-4 Everybody! HDU - 1847
  12. 阿里云数据湖分析急招实习生
  13. DDS之DCPS Subscription模块
  14. 「业务架构」EA874:业务架构层
  15. python语言属于机器语言汇编语言高级语言自然语言_机器语言,汇编语言,高级语言的主要特点及区别是什么...
  16. 程序员必备的5大有趣编程网站,学编程就像玩游戏一样!
  17. matlab怎么控制采集卡,用MATLAB控制NI采集卡实现高精度数据采集与分析功能-l采.pdf...
  18. win10下载DEVC++5.11
  19. 嵌入式常用的算法 - 二阶IIR低通滤波器
  20. Python网络爬虫爬取携程网中的游记标题及内容

热门文章

  1. 20145204《网络对抗》免杀原理与实践
  2. PHP版本中的VC6,VC9,VC11,TS,NTS区别
  3. IE8下window.open出现的bug
  4. linux 安装pyaudio
  5. cvCompareHist() 直方图匹配
  6. c++fabs函数_支持向量机(SVM)模型python复现 - SMO算法;核技巧;高斯核函数
  7. Linux MPLS 总结
  8. MySQL不同字段比较大小_mysql 字段定义 对 大小比较的影响
  9. log4cpp乱码_log4cxx配置使用(一)
  10. linux和windows下,C/C++的sleep函数