zoukankan      html  css  js  c++  java
  • 简单选择排序(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

    Min是清明的茗
  • 相关阅读:
    [NOIP2008] 提高组 洛谷P1125 笨小猴
    洛谷P3384 【模板】树链剖分
    Bzoj1503 [NOI2004]郁闷的出纳员
    POJ1422 Air Raid
    洛谷P1133 教主的花园
    洛谷P1186 玛丽卡
    HDU5115 Dire Wolf
    POJ1308 Is It A Tree?
    POJ2513 Colored Sticks
    Bzoj2326 [HNOI2011]数学作业
  • 原文地址:https://www.cnblogs.com/MinPage/p/14104002.html
Copyright © 2011-2022 走看看