Tim Peters开发了Timsort混合排序算法2002年。它巧妙地结合了合并排序和插入排序的思想,设计用于在实际数据上表现良好。TimSort最初是为Python开发的,但后来通过约书亚·布洛克(Java Collections的设计者也指出大多数二进制搜索算法都被破坏了). TimSort现在被用作Android SDK、Sun的JDK和OpenJDK的默认排序算法。鉴于这些平台的流行,这意味着使用TimSort进行排序的计算机、云服务和手机的数量已达数十亿。
快进到2015年。在我们成功验证了Java中的计数和基数排序实现之后(J.汽车。推理53(2),129-139)使用名为凯伊,我们正在寻找新的挑战。TimSort似乎符合要求,因为它相当复杂且被广泛使用。不幸的是,我们无法证明其正确性。更仔细的分析表明,这很简单,因为TimSort被破坏了,我们的理论考虑最终引导我们找到了找到错误的途径(有趣的是,该错误已经出现在Python实现中)。这篇博客文章展示了我们是如何做到的。
该论文具有完整的分析,并且在我们的网站.
更新(2017年8月):KIT小组使用KeY验证JDK的双透视快速排序实现用作整数或长数组的默认排序算法。TimSort是引用类型数组的默认值。继续阅读→