简单选择排序(Selection Sort)

标签

非稳定排序、原地排序、比较排序

基本思想

每趟从线性表的待排区域选取关键字最小的元素,将其放到已排序区域的最后。因为每趟可以让待排序域的元素数量减少一个,所以总共需要$n - 1$趟操作就可以将整个线性表排序完成。

堆优化

在每次查找关键字最小的元素时,可以使用堆对效率进行优化,使用对来优化的选择排序就是堆排序。由于一共要查找$n$次最小值,每次查找的时间为$O(log n)$,所以堆排序的时间复杂度为$O(nlog n)$。

算法描述

$n$个记录的直接选择排序可经过$n - 1$趟直接选择排序得到有序结果。具体算法描述如下:

  • 步骤1:初始状态:无序区为$R[1…n]$,有序区为空;
  • 步骤2:第i趟排序$(i = 1, 2, 3, …, n-1)$开始时,当前有序区和无序区分别为$R[1…i - 1]$和$R(i…n)$。该趟排序从当前无序区中-选出关键字最小的记录 $R[k]$,将它与无序区的第$1$个记录$R$交换,使$R[1…i]$和$R[i + 1…n)$分别变为记录个数增加$1$个的新有序区和记录个数减少$1$个的新无序区;
  • 步骤3:$n - 1$趟结束,数组有序化了。

动图演示

时间复杂度

选择排序是表现最稳定的排序算法之一 ,因为无论什么数据进去都是$O(n^2)$的时间复杂度 ,所以用到它的时候,数据规模越小越好。

最好情况:$O(n^2)$

最坏情况:$O(n^2)$

平均情况:$O(n^2)$

空间复杂度

没有额外的空间开销。

算法示例

参考资料:

https://blog.csdn.net/coolwriter/article/details/78732728

https://blog.csdn.net/weixin_41190227/article/details/86600821

https://www.cnblogs.com/itsharehome/p/11058010.html

posted @ 2020-12-08 17:54  箐茗  阅读(234)  评论(0编辑  收藏  举报