Python'un yerleşik sort () yöntemi hakkında


104

sort()Python'daki yerleşik yöntem hangi algoritmayı kullanıyor? Bu yöntemin koduna bakmak mümkün mü?


10
Elbette yöntemin koduna bakmak mümkündür - Python açık kaynaklı bir projedir. Yöntem muhtemelen C'de uygulanmaktadır, bu nedenle herhangi bir anlam ifade etmek için C hakkında biraz bilgi sahibi olmanız gerekir.
Chris Lutz

Versiyon önemli mi?
meder omuraliev

@melder: Hayır =) Sadece profesyonel bir algoritmaya bir göz atmak istiyorum: P @chris: nasıl?
Johannes

3
Kaynak kodunu Python yorumlayıcısına indirin. sort()Yöntemi nerede uyguladıklarını veya yorumlayıcının biçimlendirmesinin ne olduğunu bilmiyorum , ama orada bir yerde olmalı ve bahse girerim hız endişeleri için C'de uygulanmıştır.
Chris Lutz

İşte bunun nasıl kullanıldığına dair bir örnek
Hari Ganesan

Yanıtlar:


119

Elbette! Kod burada , function ile başlayıp isltbir süre QUITE için devam ediyor ;-). Chris'in yorumundan da anlaşılacağı gibi, bu C kodudur. Ayrıca metinsel bir açıklama, sonuçlar vb. İçin bu metin dosyasını okumak isteyeceksiniz .

Java kodunu C kodundan okumayı tercih ediyorsanız, Joshua Bloch'un Java'da ve Java için zaman sıralaması uygulamasına bakabilirsiniz (Joshua aynı zamanda 1997'de, hala Java'da kullanılan değiştirilmiş birleştirme sırasını uygulayan kişidir ve biri Java'nın bunu yapacağını umabilir. en sonunda son zaman sıralaması bağlantı noktasına geçmiştir).

Timsort'un Java portunun bazı açıklaması burada , fark burada (gerekli tüm dosyalara işaretçilerle), anahtar dosya burada - FWIW, ben Java programcısından daha iyi bir C programcısıyım, bu durumda buluyorum Joshua'nın Java kodu genel olarak Tim'in C kodundan daha okunabilir ;-).


4
@Chris, "Python kaynaklarına göz at", tarayıcımın tüm yer imi çubuklarında bir kısayol - svn.python.org/view/python/trunk ;-).
Alex Martelli

Fonksiyonun ne yaptığını bilmek istiyorum list_ass_item(). :)
Chris Lutz

2
Listenin bir öğesine atama gerçekleştirir (tıpkı list_ass_slice'ın listenin bir dilimine atama yapması gibi), sıralama ile hiçbir ilgisi yoktur. Sanırım "atama" nın kısaltması ismi komik yapıyor ...
Alex Martelli

3
Şu anki sürümü , listsort.txtyaygın kafa karışıklıklarına değinen bazı notlar ekliyor.
Tim Peters


9

Erken python sürümlerinde, sıralama işlevi değiştirilmiş bir quicksort sürümü uyguladı. Bununla birlikte, kararsız kabul edildi ve 2.3'ten itibaren uyarlanabilir bir birleştirme algoritması kullanmaya geçtiler.


Quicksort, 'kararsız' sayılmaz - yaygın olarak kullanılan tanımlara göre, hızlı sıralama istikrarsızdır - yani, bu sıralama sırasında eşitlerse, iki nesnenin orijinal sıralaması korunmaz. Kararsız bir sıralama algoritmasına sahip olmak, verileri birden çok ölçütle mantıklı bir şekilde sıralamak için her türden 'sihir' bulmanız gerektiği anlamına gelir, daha sonra sıralı aramaları zincirlemek yerine - DOB'a göre sıralamak ve daha sonra ad vermek istiyorsanız, zaman sıralamasında , önce isme göre sıralarsınız ve sonra DOB Hızlı sıralama ile bunu yapamazsınız
Tony Suffolk 66
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.