选择排序

Posted 厉子的算法日常

tags:

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

   

    上一小节给大家介绍了桶排序,最大的缺点就是耗费内存,如果需要排序的数的范围是int,那我们要定义一个大小为21474836478的数组吗,或是如果有浮点数(小数)的出现,显然桶排序并不适用,今天要给大家的介绍的是另外一种排序方法,没错,就是选择排序。




    选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数列元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

在本文里,我们只介绍从小到大排序。


举一个小例子:


最后我们一起来看一下c++代码的实现


从代码中不难看出选择排序的时间复杂度是O(n^2)。如果对于复杂度还不是很懂的话,可以浏览一下 。



缺点

    选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。

  下一节,会给大家介绍时间复杂度同样是O(n^2),但更稳定的冒泡排序。

 






以上是关于选择排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

❤️数据结构入门❤️(4 - 2)- 选择排序

选择排序之二:简单选择排序

排序算法6--选择排序--简单选择排序

Python | 选择排序之树形选择排序

第二篇,选择排序算法:简单选择排序堆排序