posts - 8,comments - 0,views - 1100

一直以来都认为快速排序是最优的排序算法,所以认为STL中的sort函数也采用快速排序,但事实好像复杂的多。

 1 问题思考

  • 数据量大和数据量小都适合用快速排序吗?
  • 递归过深会引发什么问题?
  • 怎么控制递归深度?如果达到递归深度了还没排完序怎么办?

2 问题解答

  • 数据量小不适合用快速排序,因为频繁的递归调用会带来额外的负担;
  • 递归过深容易引起堆栈溢出;
  • 当递归层次过深时,该换堆排序,因为堆排序的时间复杂度恒为Ο(nlogn);

3 STL中的sort

  STL中的sort结合了快速排序、堆排序和直接插入排序(排序算法的详细介绍参见排序算法的性能分析 - BeLady - 博客园 (cnblogs.com),基本的流程如下图:

  

 

  简单来说就是,设置一个长度阈值l,和一个深度阈值d,当待排序元素数量大于等于l时,使用快速排序,且当快速排序的递归深度达到d时,改用堆排序;当待排序元素数量小于l时,选用直接插入排序,因为直接插入排序在序列接近于有序时性能最优

本人研究牲一枚,敬请各位大佬批评指正~~~

posted on   BeLady  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示