![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a44ae005643a8f974af1465c45ec1284.png)
0.概述
1.想理解TimeSort必须先理解归并排序
https://blog.csdn.net/qq_21383435/article/details/80372033
2. timsort 其实只是对归并排序进行了一系列的改进。
其实OpenJDK在Java SE 7的Arrays关于Object元素数组的sort也使用了TimSort,
而Spark的org.apache.spark.util.collection
包中的用Java编写的TimSort也和Java SE 7中的TimSort没有太大区别
。
3.Timsort的核心过程
TimSort 算法为了减少对升序部分的回溯和对降序部分的性能倒退
,将输入按其升序和降序特点进行了分区
。
排序的输入的单位不是一个个单独的数字,而是一个个的块-分区
。其中每一个分区叫一个run。
针对这些 run 序列,每次拿一个 run 出来按规则进行合并。每次合并会将两个 run合并成一个 run。合并的结果保存到栈中。合并直到消耗掉所有的 run,这时将栈上剩余的 run合并到只剩一个 run 为止。这时这个仅剩的 run 便是排好序的结果。
综上述过