十种排序算法总结

比较排序

------------基础排序----------

冒泡排序

谁大谁上,每一轮都把最大的顶到天花板,效率太低O(n^2),掌握swap。

选择排序

效率较低,但经常用它内部的循环方式来找最大值和最小值,O(n^2)。

插入排序

虽然平均效率低,但在序列基本有序时,它很快,所以也有其使用范围。Arrays工具类在1.7做了较大改动。

希尔排序

希尔排序(缩小增量排序),是插入排序的改良,对空间思维训练有帮助。

-------------分治法------------

1.子问题拆分
2.递归求解子问题
3.合并子问题的解

快速排序

快速排序是软件工业中最常见的常规排序法,其双向指针扫描分区算法是核心,往往用于解决类似问题,特别地partition算法用来划分不同性质的元素,partition->selectK也用于著名的topk问题。
时间复杂度O(nlgn),但是如果主元不是中位数的话,特别地如果每次主元都在数组区间的一侧,复杂度将退化为n^2。
工业优化:三点取中法,绝对中值法,小数据量用插入排序。
快排重视子问题拆分。

归并排序

空间换时间,归并重视子问题的解的合并。

堆排序

用到了二叉堆数据结构,是继续掌握树结构的起手式。

总结: 以上七种排序都是基于比较的排序,在元素随机顺序情况下它们中最好的也只是nlgn。快排,归并,堆排序都是nlgn的复杂度,其中快排表现最好,是原址的不用开辟辅助空间;堆排序也是原地址的,但是常数因子较大,不具备优势。
下面三个是非比较排序,在特定情况下会比基于比较的排序快。

非比较排序

计数排序

可以说是最快的,用它来解决问题时必须注意如果序列中的值分布非常稀疏,并且最大值很大,空间将会浪费很多。
所以计数排序的适用范围是:序列中的值比较集中,已知边界,且边界较小

桶排序

先分桶,再用其他排序方法对桶内元素进行排序,最后按桶编号依次出桶。
用它解决问题必须注意序列的值是否均匀分布在桶中。如果不均匀,那么个别桶中的元素可能会远多于其他桶,桶内排序用比较排序,极端情况下,全部元素在一个桶内,复杂度退化为nlgn。

基数排序

数值型排序里又快又稳的排序,无论元素分布如何,只开辟固定的辅助空间(10个桶)。
对比桶排序,基数排序每次需要的桶的数量并不多。而且基数排序几乎不需要任何 “比较”操作,而桶排序桶内多个数据每次必须进行基于比较操作的排序。
因此,在实际应用中,基数排序的应用范围更加广泛。

时间复杂度对照表及图

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值