常见排序方法的对比

排序方法空间复杂度时间复杂度稳定适用范围
直接插入排序O(1)O(nlogn) – O(n2) – O(n2)稳定基本有序+小数组
折半插入排序O(1)平均–O(n2)稳定相比直接插入,比较次数变少,但是插入次数不变
希尔(增量)排序O(1)根据增量变化O(n1.25)~O(1.6Xn1.25)不稳定大数组,n越大优势越大
冒泡排序O(1)O(n2)稳定小数组
快速排序(对冒泡的改进)O(1)O(nlogn) – O(nlogn) – O(n2)不稳定(出于性能上的考虑,牺牲了算法的稳定性)在序列有序或者逆序的情况下最不利于发挥其长处
选择排序O(1)O(n2)不稳定性能差,稳定差,数组小
堆排序O(1)O(nlogn)不稳定求最大(小)的m个
基数排序最坏O(kn)O(n+B),其中n为待排序元素个数,而B是桶数稳定桶数少的情况
归并排序O(n)O(nlogn)稳定快速+稳定,牺牲空间换时间

总结:
1.空间复杂度:除了基数排序(桶)和归并排序,其他的都是O(1)。归并很容易是O(n),牺牲空间换时间。基数排序最坏则是O(kn)。
2.时间复杂度(性能):最好的则是堆排序和归并排序,最好最坏都是线性对数阶O(nlogn)。最差的是冒泡排序和选择排序,最好最坏都是平方阶O(n2)。希尔排序性能取决于数组的大小和增量选择,数组越大性价比越高(突然想到小米)。直接插入排序和折半插入排序则取决于小数组是否有序,有序性价比高。快速排序恰恰相反,有序或者逆序的情况下性价比低。(插入和快排妥妥的死对头)。
3.稳定性:基于选择(找出最大最小)的排序方法,比如简单选择排序,堆排序都是不稳定的。希尔排序和快排也是不稳定的。剩下的都稳定。(不稳定的4个)
4.适用范围:
小数组:选择冒泡、插入、选择等简单排序方法;
大数组:希尔排序等;
有序:直接插入和折半插入;
无序:快排;
性能好:归并和堆排序;
只求最大(小)几个:堆排序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值