常用排序算法之冒泡排序选择排序
Posted RobotCode俱乐部
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用排序算法之冒泡排序选择排序相关的知识,希望对你有一定的参考价值。
上一篇中,主要介绍了数组与链表两种线性表的区别:
这一篇介绍将无序的线性表节点进行排序的算法。主要介绍采用数组作为数据容器的排序算法,因为数组的访问时间复杂度为O(1),而链表为O(n)。而且节点元素比较大小后,进行位置交换时,数组比链表更为方便。
目前常用的排序算法有:冒泡排序、选择排序、插入排序、堆排序、归并排序、快速排序等。
有基于线性数据结构的算法,也有基于堆的排序算法。本篇讲解最简单易懂的冒泡排序与选择排序。之所以把这两种放一起,是因为冒泡跟选择排序的点像,不同的是,冒泡每次比较是相邻两个元素的比较,小的往前放,大的往后跑(以从小到大排序为例);而选择排序是每次从所有元素中选择一个最小的,放最前,所以比较一轮下来,最多只有两个元素位置发生改变,而且保证最小的占据第一个位置,这一点和冒泡排序每轮的结果一样,最小的必然在最前。最小之后的元素都是无序的。
But,冒泡排序天生多做了一步,这也是比选择排序优越的地方,就是上面说的,每次比较,小的往前放,大的往后放,而且最小的元素肯定是一直向前的,尽管后面的元素不是最大的一直往后,但是也保证了每次比较大的元素在向后移。看下面动画演示:
这就使得在每次比较中,冒泡排序做了两步,每一步是小的往前移,大的往后移,因为比较是向前推进的,如上图中的 "天平"所示,这就保证了最小的一直被推到最前,就像冒泡,同时大的(每次比较中,相对较大的,注意,不是最大的)往后,故名"冒泡排序"。
而我们再来看选择排序,选择排序这个名字起的简直不能更准确了,因为每次都是从剩下的没有排序好的元素中选择一个最小的,所以故名为”选择排序“。
所以我们可以看到这两种排序的相同点:
每一轮下来,(对于冒泡来说,两两比较的”天平“推到最前面;对于选择排序来说,挑选出最小的元素放到最前),两种排序算法,都是最小的元素,处于第一个位置;(后面讲插入排序就不是,所以也把这两种排序放一起讲)
不同点:
不同点是,冒泡每次比较还多做了一步,就是将大的元素往后推了一步,这就使得后面的元素相对有序,尽管整体上还是无序的;而选择排序每次比较只为选出最小的,这样CPU的利用率就不高了,因为每一轮比较那么多次,只选出了个最小的元素,并且只交换了两个元素的位置,而冒泡算法的”天平“在向前推进的过程中,元素位置是一直可能交换的。
先写到这,以后想到这两种算法其他有意思的地方再来更新。
----------------------------------2018.12.16更新------------------------------------
增加伪代码动态展示过程。
冒泡算法伪代码执行演示
选择排序伪代码执行演示
--END
以上是关于常用排序算法之冒泡排序选择排序的主要内容,如果未能解决你的问题,请参考以下文章