Python的sorted()函数使用哪种算法?

150
在Python 2.7中,Python内置的sorted函数是如何工作的?它使用什么算法?

4
这个问题已经在这里得到回答。它使用Timsort算法进行排序。 - Aharpe
对于其他好奇的人,这篇文章非常棒:http://corte.si//posts/code/timsort/index.html - Hartley Brody
@HartleyBrody,链接已经失效了。你是指 https://corte.si/posts/code/timsort/ 还是 https://corte.si/posts/code/timsort-grayscale/ ? - heretoinfinity
3个回答

256

Python使用一种名为Timsort的算法:

Timsort是一种混合排序算法,源自于归并排序和插入排序,旨在处理各种实际数据时表现出色。它是由Tim Peters于2002年发明,用于Python编程语言中。该算法查找已经有序的数据子集,并使用这些子集来更加有效地对数据进行排序。这是通过将已识别的子集(称为“run”)与现有的子集合并,直到满足某些条件为止来完成的。自版本2.3以来,Timsort一直是Python标准排序算法。现在它也被用于Java SE 7中的数组排序以及Android平台上的排序。


18
这是一个非常令人印象深刻的算法:楼主的朋友很难独自开发出更好的东西。 - Daniel Roseman
35
它不仅使用了非常巧妙的算法,而且还用手优化过的C语言实现。即使你按照伪代码将其翻译成Python并自行实现,它的速度和内存消耗也会慢上一个数量级。 - user395760
4
一篇有趣的论文称在 TimSort 中发现了一个错误,并提供了修复方法:http://envisage-project.eu/proving-android-java-and-python-sorting-algorithm-is-broken-and-how-to-fix-it/。 - bgporter
8
准确地说,问题不在Timsort算法本身,而是在其参考实现中。根据维基百科文章(https://en.wikipedia.org/wiki/Timsort#Formal_verification)所述,该问题已经被修复。 - SergiyKolesnikov

15

这个排序算法被称为 Timsort。详见 timsort


13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接