通俗易懂的让你彻底搞懂冒泡排序的由来
来源:互联网 发布:php环境搭建 编辑:程序博客网 时间:2024/06/05 04:31
先上图:
冒泡排序是属于简单排序当中的,为什么叫冒泡排序呢,
假如我们把我们的元素用泡泡去比喻,那么数据不同,泡泡就不同大小。
假如我们想把数据从小到大排序,那么在排序的过程中小泡泡会慢慢往上被交换出来也叫冒上来。
分析冒泡过程:
既然冒泡排序就是元素不断交换的过程,那么我们图中假如有5个泡泡,那么我们假如开始第一趟冒泡比较,第一个泡和第二个泡比较大小,大的泡泡会放在下面的位置,那么就有2个可能,要么小泡往上冒,要么不动,那么我一直2 个相邻的泡泡进行大小比较,出现下面的泡小就往上冒,那么比到最后一个泡就结束了第一趟过程,这样我们的最后一个泡泡就是最大的。 接下来我们就需要把剩余的4个泡继续上面过程,我们知道冒一趟就找到一个最大的放他对应的位置,那么就5个泡,我们假如冒了4趟后最大的4个泡泡就已经在最下面。那么第一个泡泡是不是最小的呢,肯定是,因此我们知道了需要冒泡的回合数就是泡泡数-1.
现在我们来具体上代码:
//冒泡排序//参数A[] 把需要的数组给我,以及数组的元素个数也给我 我将给你一个有序的数组void Bubble_Sort(ElementType A[], int n){ int flag = 0; //标志初始为0表示没有发现元素交换 为了改善性能用,如果没有元素交换说明本来就有序直接跳出循环 //由上面分析我们知道了排序的回合数是n - 1; //开始循环回合数 for(int i = 0; i < n - 1; i++) { //开始真正的每一趟的比较 for(int j = i; j < n - 1; j++ ) //j我们用来索引数组里面的元素的 { if(A[j] > A[j + 1]) //j的取值范围为0 到 n-2 { //交换下元素 Swap(A[j],A[j + 1]); flag = 1; //表示元素交换过 } } //第一趟比较完后开始跑后面代码 这个时候我们就可以了解是不是换过元素 //开始判断标志 来了解元素是不是早就有序 if(flag == 0) { //说明元素有序了 break; //直接跳出循环,没有必要进行后续的for循环了 } }}排序时间复杂度分析:最坏的情况就是我们执行完第一趟就发现已经序,这个时候我们仅仅是和这个n也就是元素的多少有关。时间复杂度为0(n)最坏情况: 每一趟是时间复杂度是n 进行了n - 1趟。 那么最终是n*(n - 1) 时间复杂度则为0(N^2)
阅读全文
0 0
- 通俗易懂的让你彻底搞懂冒泡排序的由来
- 通俗易懂的让你彻底明白接口回调机制
- 让你彻底搞懂offset
- [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章
- [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章
- 关于EMC EMI EMS 通俗易懂的语言让你彻底搞清楚
- 通过一张简单的图,让你彻底地、永久地搞懂JS的==运算
- 几段代码让你彻底搞懂编码出现乱码问题(File类的几个读写文本问题)
- 几分钟让你彻底搞懂 c#之using和try-catch-finaly的区别和联系
- 看完让你彻底搞懂Websocket原理
- 看完让你彻底搞懂Websocket原理
- 看完让你彻底搞懂Websocket原理
- 一篇文章让你彻底搞懂Material Design
- 看完让你彻底搞懂Websocket原理
- 看完让你彻底搞懂Websocket原理
- 看完让你彻底搞懂Websocket原理
- 看完让你彻底搞懂Websocket原理
- 看完让你彻底搞懂Websocket原理
- tp5隐藏入口文件index.php
- JavaScript 页面操作 1
- oracle中的聚合函数count、max、min、sum、avg等等
- Git 工作流程
- CentOS7 在线安装 Python3
- 通俗易懂的让你彻底搞懂冒泡排序的由来
- mysql5.7官网直译SQL语句优化--引擎压入条件优化
- Git 工作区、暂存区和版本库
- 约束规划问题与凸二次规划
- 第十周项目三——用二叉树求解代数表达式
- ubuntu16.04 主题安装
- jsp和servlet的区别?
- native====java===c
- 6 天时间修改 1 行代码:现实中的软件开发流程