• 简单选择排序(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是清明的茗
  • 相关阅读:
    如何借助BM算法轻松理解KMP算法
    如何实现文本编辑器中的查找替换功能?——BF算法
    C++中求数组长度与memset的用法
    什么是素数/质数/合数
    深度和广度优先搜索:如何找出社交网络中的三度好友关系?
    如何存储微博、微信等社交网络中的好友关系?
    为什么说堆排序没有快速排序快?
    HTML5中标记与特殊属性
    margin外边距问题
    html热点区域
  • 原文地址:https://www.cnblogs.com/MinPage/p/14104002.html
Copyright © 2020-2023  润新知