timsort

timsort就是优化到极致的mergesort.

如果数组小于64就用插入排序解决。

首先,有一个minrun的值,取决于数组大小的前6位。如果后面不是全0,就要加1,主要是要让n/minrun差不多正好是2的幂或比它稍小,并且minrun本身要大于64.

对于每一个minrun,在检查的时候,首先先找到从当前位开始的最长的严格下降或上升序列,然后如果是降序就on反一下,如果没有到达minrun个数,那么就强行扩张,将后面几个通过插入排序的方式插入。

每次找到一个新的minrun后,就检测前面的minrun是否要合并,要一直保持A>b+c,b>c的情况,实际上就是只要比较最后两个run的大小就可以了,如果倒数第二个小于倒数第一个,那么就合并,然后向前递归。

到最后全部都有了之后,强行将剩下的所有minrun合并。

合并的方法是mergesort里的merge。


timsort
https://lhish.github.io/project/hide/timsort/
作者
lhy
发布于
2024年6月30日
许可协议