各种常用排序算法性能

排序方法最好时间复杂度平均时间复杂度最坏时间复杂度空间复杂度(辅助存储)稳定性适用情况
插入排序O(N)O(N^2)O(N^2)O(1)稳定√数据量小,部分或整体有序
希尔排序O(N)O(N^1.3)O(N^2)O(1)不稳定
选择排序O(N^2)O(N^2)O(N^2)O(1)不稳定数据量小,对稳定性无要求
堆排序O(NlogN)O(NlogN)O(NlogN)O(1)不稳定数据量大,百万级
冒泡排序O(N)O(N^2)O(N^2)O(1)稳定√数据量小,对稳定性有要求
快速排序O(NlogN)O(NlogN)O(N^2)O(logN)~O(N)不稳定数据量大,但递归,有内存开销
归并排序O(NlogN)O(NlogN)O(NlogN)O(N)稳定√数据量大

面试:快排>归并>堆>冒泡>插入>选择

堆排序使用建议:由于初始化堆需要比较的次数较多,因此,堆排序比较适合于数据量非常大的场合(百万数据或更多)。且由于高效的快速排序是基于递归实现的,所以在数据量非常大时会发生堆栈溢出错误。

快排,归并排,堆排序时间复杂度相同,但它们三者区别是快速排序和堆排序是不稳定的,归并为稳定型。对于辅助空间堆排序要求最小,归并最多。对于最好情况复杂度相同,最坏的情况下快速排序要复杂些。对于数据的数量来说,选择归并或堆,如果还要求考虑辅助空间,就用堆排序,在涉及稳定性方面则考虑归并(虽然所需空间较多)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值