最快的排序算法TimSort还能更快吗

关于TimSort排序算法,请看这篇:另一位博主的博客

本文主要讨论让TimSort更快的方法。

已经产生了许多run,它们的长度是:4 6 2 5 7

用类似于霍夫曼编码的方法,找出最小的两项,相加。这里是4 2,他们俩相加得6,现在的数据是:6 6 5 7

继续选最小的两个相加,是6 5,得到6 11 7

继续,13 11

最后,24
最快的排序算法TimSort还能更快吗_第1张图片
解释一下,将长度为4和6的两个run,进行归并排序,需要的时间约是4+6。采用霍夫曼编码的方式,可以让总的时间最小,这与霍夫曼编码的最优特性有关。

上图中,总时间为6+11+13+24=54

如果不按照这个顺序合并,总时间会变大:
最快的排序算法TimSort还能更快吗_第2张图片
执行归并排序时的操作次数,从54变成了62,这不是最优的。

总结

本文描述了一种让TimSort更快的方法,该方法从霍夫曼编码获得灵感,每次挑最小的两个run合并,可使总的操作数最小化。

你可能感兴趣的:(喜欢幻想的我,算法)