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

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

它的过程如下:

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

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

可以参考:
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

发布了95 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/104745033