分享

选择排序

 长沙7喜 2019-10-19

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


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

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

举一个小例子:


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

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

缺点

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多