关于Python';s内置的sort()方法

关于Python';s内置的sort()方法,python,algorithm,sorting,python-internals,Python,Algorithm,Sorting,Python Internals,Python中内置的sort()方法使用的是什么算法?可以看一下该方法的代码吗?在早期的python版本中,sort函数实现了一个经过修改的quicksort版本。 然而,它被认为是不稳定的,从2.3开始,他们转而使用自适应合并排序算法。当然!代码是,从函数islt开始,并持续了很长一段时间;-)。正如Chris的评论所暗示的,这是C代码。您还需要阅读文本文件以获得文本解释、结果等 如果你更喜欢阅读Java代码而不是C代码,你可以看看Joshua Bloch在Java和for Java中的tim

Python中内置的
sort()
方法使用的是什么算法?可以看一下该方法的代码吗?

在早期的python版本中,sort函数实现了一个经过修改的quicksort版本。 然而,它被认为是不稳定的,从2.3开始,他们转而使用自适应合并排序算法。

当然!代码是,从函数
islt
开始,并持续了很长一段时间;-)。正如Chris的评论所暗示的,这是C代码。您还需要阅读文本文件以获得文本解释、结果等

如果你更喜欢阅读Java代码而不是C代码,你可以看看Joshua Bloch在Java和for Java中的timsort实现(Joshua也是1997年实现了Java中仍然使用的修改后的mergesort的人,你可以希望Java最终会切换到他最近的timsort端口)


对timsort的Java端口的一些解释是,diff是(带有指向所有需要文件的指针),关键文件是--FWIW,虽然我是一个比Java程序员更好的C程序员,但在本例中,我发现Joshua的Java代码总体上比Tim的C代码更可读;-)

我只是想提供一个非常有用的链接,但在Alex的全面回答中我没有提供这个链接:(使用图形可视化!)


(是的,该算法基本上就是现在所知的)

当然可以查看该方法的代码——Python是一个开源项目。不过,该方法可能是用C实现的,因此您必须对C有一点了解才能理解它。版本重要吗?@melder:No=)我只想看一看pro算法:P@chris:how?将源代码下载到Python解释器。我不知道他们在哪里实现了
sort()
方法,也不知道解释器的格式是什么,但它肯定在那里的某个地方,我打赌它是用C实现的,以提高速度。这是一个例子used@Chris,“浏览Python源代码”是我所有浏览器书签栏中的快捷方式——它指向;-)。我想知道函数
list\u ass\u item()
的作用是什么:对列表中的一个项目执行赋值(就像list\u ass\u slice对列表中的一个片段执行赋值一样),与排序无关。我猜“作业”的缩写让这个名字很有趣。。。of
listsort.txt
添加了一些注释,以解决常见的混淆问题。快速排序不是“不稳定的”——根据常用的定义,快速排序是不稳定的——也就是说,如果两个对象在排序过程中相等,则不会保留它们的原始顺序。拥有一个不稳定的排序算法意味着您必须想出各种各样的“魔法”来合理地使用多个条件对数据进行排序,而不是简单地链接排序调用——在timsort中,如果您想先按D.O.B排序,然后按名称排序,您只需先按名称排序,然后按D.O.B排序。使用快速排序无法做到这一点