排序总结

算法对比

算法时间复杂度是否稳定排序是否原地排序
冒泡排序O(n^2)
插入排序O(n^2)
选择排序O(n^2)
归并排序O(nlogn)
快速排序O(nlogn)
桶排序O(n)
计数排序O(n)
基数排序O(n)

工业级排序

工业级排序都是多种排序灵活搭配使用,降低时间复杂度,追求最佳性能。

快排分区点优化

快排如果简单取队首或者队尾作为分区节点时候,当序列本身就是有序的就很容易退化成O(n^2)时间复杂度级别,所以区分节点有优化的策略:

  1. 三位取中法:分别队首,队中,队尾取三个数,取三位中中间大小的数作为分区点。
  2. 随机取分区段中的一个元素作为分区节点,这样就不容易退化。

案例剖析

go语言中sort.sort函数源码实现,:

  1. 先快排,快排有深度探测终止,超过递归深度后,选择堆排序,来排序剩下分区。
  2. 分区基准点就是用三数取中来实现。
  3. 当快排分区剩余12个元素时候,在使用插入排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值