关于TimSort排序算法,请看这篇:另一位博主的博客
本文主要讨论让TimSort更快的方法。
已经产生了许多run,它们的长度是:4 6 2 5 7
用类似于霍夫曼编码的方法,找出最小的两项,相加。这里是4 2,他们俩相加得6,现在的数据是:6 6 5 7
继续选最小的两个相加,是6 5,得到6 11 7
继续,13 11
最后,24
解释一下,将长度为4和6的两个run,进行归并排序,需要的时间约是4+6。采用霍夫曼编码的方式,可以让总的时间最小,这与霍夫曼编码的最优特性有关。
上图中,总时间为6+11+13+24=54
如果不按照这个顺序合并,总时间会变大:
执行归并排序时的操作次数,从54变成了62,这不是最优的。
总结
本文描述了一种让TimSort更快的方法,该方法从霍夫曼编码获得灵感,每次挑最小的两个run合并,可使总的操作数最小化。