一分钟算法——冒泡排序

Posted 无忧公主的数学时间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一分钟算法——冒泡排序相关的知识,希望对你有一定的参考价值。

冒泡排序



冒泡排序的思想


冒泡排序的思想与选择排序、插入排序类似,将10个数按从小到大的顺序排序。第一次从头到尾两两比较,如果后一个较小(不满足从小到大的条件),则交换,使得操作完后,最后的一个数一定是最大的。第二次从头到倒数第二个,重复第一次的操作,最后倒数第二个数一定是第二大的。以此类推,最后第一个数(第10次)无须比较。说起来还挺简单,那为什么叫冒泡排序呢?其实连续不断将最大的、次大的等等数经过多次比较、交换推至最末端,这样很像冒泡,一个个数就好比泡泡一样“扑扑”地往后冒。


下面的这张图表现了第一次将最大的冒泡至最末尾的一个过程:





冒泡排序的时间复杂度


那冒泡排序的时间复杂度是什么呢?先计算最坏情况,并假设一共有n个数。第一次将最大的推至最末需要比较、交换n-1次,第二次需要n-2次,直到最后一个无需操作。那么一共是O(n*(n-1)/2),经过简化得O(n*n)。但是它的最优情况会大大地减少比较次数。如果扫完第一遍没有任何“冒泡”(交换),就说明这个序列本身就是有序的,之后无需继续操作。因此只要O(n)即可完成,当然如果有一段没有冒泡,那就是有序的。


冒泡排序和其它排序的比较以及其优点


冒泡排序究竟有什么优点呢?插入排序本身一个最明显的缺点就是,在某一时刻(不在最后),不能保证其中某一段是排好序的,因为有可能后来新来的数会插进来。而冒泡排序每次从最末端往前一段是从大到小的固定不变的一部分,选择排序也是一样。之前也提到过选择排序的时间复杂度一直都是O(n*n),那冒泡排序中存在一些情况是只需要O(n)就可以完成的(上一自然段中讲到的)。在实际应用中,冒泡排序的好处还真不少。不仅是因为在写程序代码时比较简单易懂,而且我们并不常常要求排完所有的数。例如,现有一百万个数,要求有序地给出前20大的数。用冒泡排序只要20次从头至尾的冒泡就可以完成了,而插入排序就会非常费时,因为它会把所有的数都排序一遍,很浪费。(堆排序更快,以后再介绍给大家)


一分钟算法——冒泡排序


如果想了解插入排序和选择排序,可以点击下方蓝字查看:






以上是关于一分钟算法——冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

给自己五分钟,彻底搞懂并优化冒泡排序

给自己五分钟,彻底搞懂并优化冒泡排序

给自己五分钟,彻底搞懂并优化冒泡排序

学习算法 -- 马桶排序冒泡排序和快速排序

排序算法冒泡排序

[C#] 用菜鸟的思维学习算法 -- 马桶排序冒泡排序和快速排序