博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序
阅读量:4576 次
发布时间:2019-06-08

本文共 1413 字,大约阅读时间需要 4 分钟。

 

【基本思想】

  从后往前扫描待排序序列,如果前一个元素比后一个元素大,就交换它们两个,对每一对相邻元素作同样的工作;这样,第一次扫描待排序的序列会找到一个最小值并将其放置在第一位,第二次扫描待排序的序列会找到一个第二小的值并将其放置在第二位,第三次扫描待排序的序列会找到一个第三小的值并将其放置在第三位,以此类推,直到将所有元素排序完毕;排序的过程就像泡泡不断的往上冒,总是小的泡泡在最上面,大的泡泡在最下面。

 

【算法复杂度】

时间复杂度(平均) 时间复杂度 (最坏) 时间复杂度(最好) 空间复杂度 稳定性
O(n^2) O(n^2) O(n) O(1) 稳定

时间复杂度>>>

若文件的初始状态是正序的,一趟扫描即可完成排序,所需的关键字比较次数 
 和记录移动次数 
 均达到最小值:
 
 
 
 ,
所以,冒泡排序最好的时间复杂度为 
 。
 
若初始文件是反序的,需要进行
 
 
趟排序,每趟排序要进行
 
 
次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。
在这种情况下,比较和移动次数均达到最大值:
 
 
 
综上,冒泡排序的最坏时间复杂度为 
 ,平均时间复杂度为
 
 

算法稳定性>>>

冒泡排序就是把小的元素往前调或者把大的元素往后调,比较是相邻的两个元素比较,交换也发生在这两个元素之间,所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

 

【动图演示】

 

【算法实现】

/* ** 下面是经过优化的冒泡排序算法的具体实现 ** 设置标志位以避免对已经有序的序列继续进行排序 ** 设置边界值使每趟扫描都在已经排好序的位置处停止比较 */ void bubbleSort(vector
& seq){ int index = 0; //设置边界值,下一次比较到此处即停止 int length = seq.size(); //待排序序列的长度 bool flag = true; //设置标志位,标志为true则继续进行排序,标志为false则序列已经排好序,终止排序 for (int i = 0; i < length && flag; i = index) { flag = false; for (int j = length - 2; j >= i; j--) { if (seq[j] > seq[j + 1]) { //前一个元素比后一个元素大,交换这两个元素 index = j; //若存在数据交换,设置边界值为j seq[j] ^= seq[j + 1]; seq[j + 1] ^= seq[j]; seq[j] ^= seq[j + 1]; flag = true; //若存在数据交换,则序列没有排好序,设置标志为true } } }}

 

转载于:https://www.cnblogs.com/nkqlhqc/p/9166109.html

你可能感兴趣的文章
数据库字段数据类型对索引的影响
查看>>
mesos cluster
查看>>
Altium Designer 中差分走线
查看>>
linux 解压缩命令
查看>>
GDUT校赛
查看>>
(HDU)1076 --An Easy Task(简单任务)
查看>>
团队精神与集体主义的区别?
查看>>
Spring Boot 入门(Spring Cloud方向)
查看>>
AngularJS(九):路由
查看>>
GPS.NET 和 GeoFramework开源了
查看>>
汇编:采用址表的方法编写程序实现C程序的switch功能
查看>>
AtiveMQ初次连接的 http error:503 连接错误 Prolem accessing /.Reason : Service Unavailable...
查看>>
OFO和摩拜共享单车
查看>>
Linux软件安装管理之1——rpm命令管理
查看>>
关于 Failed to establish a new connection: [Errno 11004] getaddrinfo failed',))的问题
查看>>
JavaScript中严格判断NaN
查看>>
json_encode不自动转义斜杠“/”的方法
查看>>
CentOS 7安装PHP依赖管理Composer以及指定PHP版本使用Composer
查看>>
循序渐进大型网站架构
查看>>
Nodejs+Express 搭建 web应用
查看>>