TimSort算法 - Python、 Java、 Android平台 和 GNU Octave 的默认排序算法

TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中可以有较好的性能。

它的过程如下:

  • 扫描数组,确定其中的单调上升段和严格单调下降段,将严格下降段反转。
  • 定义最小基本片段长度,短于此的单调片段通过插入排序集中为长于此的段。
  • 反复归并一些相邻片段,过程中避免归并长度相差很大的片段,直至整个排序完成,所用分段选择策略可以保证O(n log n)时间复杂性。
如何避免归并长度相差很大的段呢?

依次将段压入栈中,若栈顶段X,段Y,段Z 的长度违反了X>Y+Z 或 Y>Z 则Y 段与较小长度的段合并,并再次放入栈中。 依据这个法则,能够尽量使得大小相同的段合并,以提高性能。注意Timsort是稳定排序故只有相邻的段才能归并。

可以参考:

简单说一下Timsort排序算法(Python,Java的官方排序算法)

https://mp.weixin.qq.com/s?__biz=MzI2MTY0OTg2Nw==&mid=2247483816&idx=1&sn=079af3d70efcb68efa7400f09decb59c&chksm=ea56650cdd21ec1ace7c8fd168d62feb636e4b32f9a4d90329fe479489d8e7a70e612df8920b&token=2074049324&lang=zh_CN#rd

https://blog.csdn.net/yangzhongblog/article/details/8184707

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值