127

sort()Pythonに組み込まれているメソッドはどのアルゴリズムを使用していますか?そのメソッドのコードを見ることができますか?

4

3 に答える 3

141

もちろん!コードはここにあり、関数から始まりislt、しばらくの間QUITEに進みます;-)。クリスのコメントが示唆しているように、それはCコードです。また、テキストによる説明や結果などについては、このテキストファイルをお読みください。

CコードよりもJavaコードを読む方が好きな場合は、JavaでのティムソートのJoshua Blochの実装を見ることができます(Joshuaは、1997年に、Javaでまだ使用されている変更されたマージソートを実装した人でもあり、Javaが最終的に彼の最近のティムソートの移植に切り替えます)。

timsortのJavaポートの説明はここにあり、diffはここにあり(必要なすべてのファイルへのポインターを含む)、キーファイルはここにあります-FWIW 、私はJavaプログラマーよりも優れたCプログラマーですが、この場合はJoshuaのJavaコードは、TimのCコードよりも全体的に読みやすくなっています;-)。

于 2009-10-04T20:53:10.383 に答える
40

Alexの包括的な回答では見逃していた非常に役立つリンクを提供したかっただけです。Pythonのティムソートの高レベルの説明(グラフの視覚化を使用)。

(はい、アルゴリズムは基本的に現在ティムソートとして知られています)

于 2009-10-04T23:03:41.827 に答える
10

初期のpythonバージョンでは、sort関数はquicksortの修正バージョンを実装していました。ただし、不安定であると見なされ、2.3の時点で、適応マージソートアルゴリズムの使用に切り替えました。

于 2009-10-04T20:52:09.140 に答える