几种排序比较
2016-01-11 23:08
232 查看
从书本上看的,这里记录下。
1.时间复杂度(平均时间复杂度)
插入排序:O(N2);
希尔排序:O(N2) Hibbard增量的希尔排序平均:O(N7/6)
堆排序:O(NlogN) (每次需要构建堆,比较次数较多;为了减少开销,每次删除的数据放到头(从小到大排)或尾(从大到小排)
归并排序:O(NlogN) (每次需要拷贝一次数组,所以不常用,费时还占内存;但在海量数据,即文件中的数据排序,都是基于该排序的思想)
快速排序:O(NlogN) (快速排序可以优化,主要是如何分组,即所谓的“枢纽元”选取,可以取left,right,middle中间值)
桶排序:O(N) (这个消耗额外内存较多,可能适合某些特出场景)
2.选择哪个合适
按照书本上的数据统计(不讨论桶排序),20以内的元素比较还不如使用插入排序,代码易懂,耗时与快排之类的相同;
1000个元素以内,优化的希尔排序可以和优化的快速排序匹配;100个元素以内,希尔排序更快。
更多的元素,最好就是用快速排序了。
1.时间复杂度(平均时间复杂度)
插入排序:O(N2);
希尔排序:O(N2) Hibbard增量的希尔排序平均:O(N7/6)
堆排序:O(NlogN) (每次需要构建堆,比较次数较多;为了减少开销,每次删除的数据放到头(从小到大排)或尾(从大到小排)
归并排序:O(NlogN) (每次需要拷贝一次数组,所以不常用,费时还占内存;但在海量数据,即文件中的数据排序,都是基于该排序的思想)
快速排序:O(NlogN) (快速排序可以优化,主要是如何分组,即所谓的“枢纽元”选取,可以取left,right,middle中间值)
桶排序:O(N) (这个消耗额外内存较多,可能适合某些特出场景)
2.选择哪个合适
按照书本上的数据统计(不讨论桶排序),20以内的元素比较还不如使用插入排序,代码易懂,耗时与快排之类的相同;
1000个元素以内,优化的希尔排序可以和优化的快速排序匹配;100个元素以内,希尔排序更快。
更多的元素,最好就是用快速排序了。
相关文章推荐
- Android圆角矩形创建工具RoundRect类
- ejabberd之开题篇
- LINUX安全设置步骤
- IOS 进阶
- Neural Networks and Deep Learning学习笔记ch3 - 改进神经网络的学习方法
- 1020. 月饼 (25)
- android的ContentProvider
- linux ssl 验证失败的原因分析和解决办法
- Java Mail(二):JavaMail介绍及发送一封简单邮件
- linux 系统调优步骤 例
- 1019. 数字黑洞 (20)
- Unity中Camera的Clear flags,Culling Mask,Depth参数
- linux网络安全设置
- Spring学习总结
- MFC CInternetSession
- Lua & C 交互 1 环境搭配
- C语言文件操作
- java中堆内存和栈内存的区别。——2016.1.11
- HVR同步文件
- [三]基本语法