Pythonの組み込みsort()メソッドについて


104

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


10
もちろん、メソッドのコードを確認することは可能です-Pythonはオープンソースプロジェクトです。ただし、このメソッドはおそらくCで実装されているため、Cについて少し理解しておく必要があります。
Chris Lutz、

バージョンは重要ですか?
meder omuraliev

@melder:いいえ=)プロのアルゴリズムを見てみたいだけです:P @chris:どうやって?
ヨハネス

3
ソースコードをPythonインタープリターにダウンロードします。彼らがsort()メソッドをどこに実装するのか、またはインタープリターのフォーマットは何なのかはわかりませんが、どこかにあるはずです。速度の問題から、Cで実装されているに違いありません。
Chris Lutz、

ここで、それが使用されている一例である
ハリガネサン

回答:


118

承知しました!コードはここにあります。関数から始まりislt、しばらくの間続きます;-)。Chrisのコメントが示唆するように、それはCコードです。また、このテキストファイルを読んで、テキストによる説明や結果などを確認することもできます。

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

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


4
@Chris、「Pythonソースの参照」は、私のブラウザーのすべてのブックマークバーのショートカットです-svn.python.org/view/python/trunk ;-) を指します。
Alex Martelli、

関数の機能を知りたいlist_ass_item()。:)
Chris Lutz、

2
リストのアイテムへの割り当てを実行します(list_ass_sliceがリストのスライスへの割り当てを実行するのと同じように)。ソートとは関係ありません。"assignment"の略語で名前がおかしいと思います...
Alex Martelli、

3
の現在のバージョンlistsort.txtは、一般的な混乱に対処するためのいくつかのメモが追加されています。
Tim Peters、


9

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


クイックソートは「不安定であるとは見なされない」-一般に使用される定義により、クイックソートは不安定です。つまり、このソート中に2つのオブジェクトが等しい場合、それらの元の順序は保持されません。不安定な並べ替えアルゴリズムがあると、単純に並べ替えの呼び出しを連鎖させるだけでなく、複数の基準でデータを適切に並べ替えるために、あらゆる種類の「マジック」を考え出す必要があります。DOBで並べ替えて名前を付ける場合は、timsortで、あなたは、単にソート名前で最初の、そしてあなたがクイックソートとのことを行うことはできませんDOB
トニー・サフォーク66
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.