排序备忘

常见排序算法及其复杂度

排序方法时间复杂度(最坏)时间复杂度(平均)时间复杂度(最好)空间复杂度稳定性复杂性
插入排序 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( n ) O(n) O(n) O ( 1 ) O(1) O(1)稳定简单
冒泡排序 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( n ) O(n) O(n) O ( 1 ) O(1) O(1)稳定简单
选择排序 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1)不稳定简单
希尔排序 O ( n 2 ) O(n^2) O(n2) O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( n ) O(n) O(n) O ( 1 ) O(1) O(1)不稳定较复杂
快速排序 O ( n 2 ) O(n^2) O(n2) O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n)不稳定较复杂
堆排序 O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( 1 ) O(1) O(1)不稳定较复杂
归并排序 O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( n log ⁡ 2 n ) \left.O(n\log_2n\right) O(nlog2n) O ( n ) O(n) O(n)稳定较复杂
基数排序 O ( d ( r + n ) ) \begin{array}{l}\left.O(d(r+n)\right)\\\end{array} O(d(r+n)) O ( d ( r + n ) ) \begin{array}{l}\left.O(d(r+n)\right)\\\end{array} O(d(r+n)) O ( d ( r d + n ) ) \begin{array}{l}\left.O(d(rd+n)\right)\\\end{array} O(d(rd+n)) O ( r d + n ) O(rd+n) O(rd+n)稳定较复杂

基数排序的复杂度中,r代表关键字的基数,d代表长度,n代表关键字的个数

适用情况

冒泡:数据量量不大,对稳定性有要求,且数据基本有序
选择:数据量不大,且对稳定性没有要求
堆排序适合处理大数据(找出一千万个数中最小的前一百个数)
思路:建立一百个节点的大顶堆,首先将前一百个数放入堆中,之后每放入一个数就删除一个堆顶元素,最后剩下的就是最小的一百个数。
归并排序效率非常不错,在数据规模较大的情况下,比希尔排序和堆排序要好。
summary:
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
 快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
 堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
 若要求排序稳定,则可选用归并排序。但前面介绍的从单个记录起进行两两归并的排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子序列,然后再两两归并之。因为直接插入排序是稳定 的,所以改进后的归并排序仍是稳定的

冒泡

在这里插入图片描述

选择排序

在这里插入图片描述

插入排序

在这里插入图片描述

希尔

在这里插入图片描述

归并

在这里插入图片描述

快排

在这里插入图片描述

基数

在这里插入图片描述

堆排

在这里插入图片描述
REF
https://www.cnblogs.com/onepixel/articles/7674659.html
https://blog.csdn.net/qi_700/article/details/77193805

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值