冒泡排序超详细讲解C语言
冒泡排序是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
算法步骤
从头开始比较相邻的元素,如果第一个比第二个大,就交换它俩,比较完这两个之后,比较下两个,直到待排序序列比较完,此时序列的最后一个元素将会是最大的元素,该元素也就排好位置了,然后待排序序列向左收缩,重新从头开始比较相邻元素,依此类推。
动图演示
静图演示
代码实现
普通
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;}}
}
复杂度、稳定性分析
时间复杂度
普通版本的时间复杂度为O(N2)O(N^{2})O(N2)
升级版本的最优时间复杂度为O(N)O(N)O(N)
最差时间复杂度为O(N2)O(N^{2})O(N2)
空间复杂度
仅仅使用了常数个辅助单元,空间复杂度是O(1);
稳定性
冒泡排序,不会改变相同元素的相对顺序,所以是稳定的。
冒泡排序超详细讲解C语言相关推荐
- 超详细讲解C语言入门函数(一)
解析已经很详细了,可以说相当入门级别了,如果喜欢的话那就请支持一下,后续会继续更新~ 代码网上搜索,并加以更改,侵权请联系删除,谢谢~ 部分例子没有详细解释是因为前面的例子已经说过了 3×4矩阵求最大 ...
- 插入排序超详细讲解C语言
文章目录 算法步骤 动图演示 静图演示 代码实现 复杂度.稳定性分析 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法步骤 将第一待排序序列 ...
- 选择排序超详细讲解C语言
文章目录 算法步骤 动图演示 静图演示 代码实现 普通 升级 复杂度.稳定性分析 选择排序是一种简单直观的排序算法,无论数据是否有序,该排序的时间复杂度恒为 O(N2)O(N^{2})O(N2),所以 ...
- Python的零基础超详细讲解(第五天)-Python的运算符
往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...
- python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上
Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...
- stm32f103利用HC06进行蓝牙通信,在7针的OLED屏幕上显示,带数据更新功能(带超详细讲解)
stm32f103利用HC06进行蓝牙通信,在7针的OLED屏幕上显示,带数据更新功能(带超详细讲解) 首先看看效果吧 手机端发送一个数据在OLED屏幕上显示 其实蓝牙通信就是个蓝牙转串口的过程,手机 ...
- Java基础18-String类【String类的特点对象个数常用方法】【超详细讲解】
Java基础-String类[超详细讲解] String类的特点 String在java.lang.String包中 1:特点 (1)String类型不能被继承,因为由final修饰 (2)Strin ...
- react的超详细讲解
create-react-app 项目目录 在HTML中使用react 1 2 3基础 React的注意事项 模拟的React 和 render React组件 函数组件 类组件 React 的数据源 ...
- Python的零基础超详细讲解(第十三天)-Python的类与对象
基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...
- Python的零基础超详细讲解(第十二天)-Python函数及使用
基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...
最新文章
- 270个开源项目,总计24w星,帮你快速找代码
- 企业高管眼中的 SAP 和「智慧企业」| 品读中国企业数字化转型的故事
- PHP 出现 502 解决方案
- Vision Transformer 论文
- 【Quartz】Spring3.2.9 + Quqrtz2.2.1 实现定时实例
- 【ANSYS命令流】Workbench中施加流体渗透压力载荷(超详细)
- 广州地铁的速度与激情
- php 相似文章,PHP TF-IDF与余弦相似性计算文章相似性
- 深入医疗PACS影像融合存储解决方案
- 震惊!你可能下了个假的抢红包神器
- Good Luck in CET-4 Everybody! HDU - 1847
- 阿里云数据湖分析急招实习生
- DDS之DCPS Subscription模块
- 「业务架构」EA874:业务架构层
- python语言属于机器语言汇编语言高级语言自然语言_机器语言,汇编语言,高级语言的主要特点及区别是什么...
- 程序员必备的5大有趣编程网站,学编程就像玩游戏一样!
- matlab怎么控制采集卡,用MATLAB控制NI采集卡实现高精度数据采集与分析功能-l采.pdf...
- win10下载DEVC++5.11
- 嵌入式常用的算法 - 二阶IIR低通滤波器
- Python网络爬虫爬取携程网中的游记标题及内容
热门文章
- 20145204《网络对抗》免杀原理与实践
- PHP版本中的VC6,VC9,VC11,TS,NTS区别
- IE8下window.open出现的bug
- linux 安装pyaudio
- cvCompareHist() 直方图匹配
- c++fabs函数_支持向量机(SVM)模型python复现 - SMO算法;核技巧;高斯核函数
- Linux MPLS 总结
- MySQL不同字段比较大小_mysql 字段定义 对 大小比较的影响
- log4cpp乱码_log4cxx配置使用(一)
- linux和windows下,C/C++的sleep函数