常用排序算法比较


平均时间复杂度 最差时间复杂度 空间复杂度 是否稳定 总结
冒泡排序 O(n^2) O(n^2) O(1) 最慢的排序算法
选择排序 O(n^2) O(n^2) O(1) 是一种交换排序算法,实际使用较少
插入排序 O(n^2) O(n^2) O(1) 比冒泡快2倍,一般在数据量1000以下使用。
希尔排序

O(nlogn)

O(n^s)
1 <s < 2
O(1) 比冒泡快5倍,比插入快2倍,比快排、归并、堆等慢。简单,适用于数据量较少(5000)以下并且速度不是很重要的场合。
快速排序 O(nlogn) O(n^2) O(1) 使用较多,平均速度最快的排序算法。它是递归实现的,需要注意递归栈可能溢出的问题。
归并排序 O(nlogn) O(n) 需要的额外空间较多,主要用于外部排序
堆排序 O(nlogn) O(1) 适用于数据量非常大的场景,比如超过百万的记录
基数排序 O(logrd)(d是关键字项数0-9,r是基数,个十百) O(logrd) O(n) 只能用于整数的排序,使用不多。

注意:上面对于算法的时间复杂度只给出了量级,而同一量级的由于其常系数的不同,其时间复杂度也是有差异的。

从平均性能来说,快速排序最佳,因为所需时间最短(快排和堆排序都是nlogn的量级,但是快排的常系数较堆排序更小一些),

但快速排序在最坏情况下的时间性能不如堆排序归并排序。n较大时,归并排序所需时间较堆排序省,但归并排序需要的辅助存储量更大。

优质内容筛选与推荐>>
1、zoj3633
2、【ABAP系列】SAP ABAP获取域(domain)值的方法
3、用xperf查看系统启动过程
4、Go语言中的make和new
5、Eclipse/STS选择一段文本进行复制变得很卡的解决方案


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号