Informacje o wbudowanej metodzie sort () w Pythonie


104

Jakiego algorytmu sort()używa metoda wbudowana w Pythonie? Czy można rzucić okiem na kod tej metody?


10
Oczywiście można spojrzeć na kod metody - Python jest projektem open source. Metoda jest jednak prawdopodobnie zaimplementowana w C, więc będziesz musiał trochę wiedzieć o C, aby nadać jej sens.
Chris Lutz

Czy wersja ma znaczenie?
meder omuraliev

@melder: Nie =) Chcę tylko rzucić okiem na profesjonalny algorytm: P @chris: jak?
Johannes

3
Pobierz kod źródłowy do interpretera języka Python. Nie wiem, gdzie implementują tę sort()metodę ani jakie jest formatowanie dla interpretera, ale musi gdzieś tam być i założę się, że jest zaimplementowany w C ze względu na obawy o szybkość.
Chris Lutz

Oto przykład jego użycia
Hari Ganesan

Odpowiedzi:


119

Pewnie! Kod jest tutaj , zaczynając od funkcji islti kontynuując przez chwilę QUITE ;-). Jak sugeruje komentarz Chrisa, jest to kod C. Będziesz także chciał przeczytać ten plik tekstowy, aby uzyskać wyjaśnienie tekstowe, wyniki itp.

Jeśli wolisz czytać kod w Javie niż w C, możesz przyjrzeć się implementacji sortowania czasu w Javie i dla Javy (Joshua Bloch jest również osobą, która wdrożyła w 1997 r. Zmodyfikowany scalak, który jest nadal używany w Javie, i można mieć nadzieję, że Java będzie w końcu przełącz się na swój ostatni port sortowania czasu).

Niektóre wyjaśnienia portu Java timsort jest tutaj , jest diff tutaj (z wskazówki dla wszystkich potrzebnych plików), plik klucza jest tutaj - FWIW, podczas gdy ja jestem lepszy niż C programista programista Java, w tym przypadku uważam, Kod Javy w Javie jest ogólnie bardziej czytelny niż kod Tima w C ;-).


4
@Chris, „Przeglądaj źródła Pythona” to skrót we wszystkich paskach zakładek mojej przeglądarki - wskazuje na svn.python.org/view/python/trunk ;-).
Alex Martelli

Chcę wiedzieć, co list_ass_item()robi ta funkcja . :)
Chris Lutz

2
Wykonuje przypisanie do elementu listy (tak jak przypisanie elementu list_ass_slice do wycinka listy), nie ma nic wspólnego z sortowaniem. Wydaje mi się, że skrót „przypisanie” sprawia, że ​​nazwa jest śmieszna ...
Alex Martelli

3
Aktualna wersja z listsort.txtdodaje kilka zauważa, że adres wspólnych nieporozumień.
Tim Peters,


9

We wczesnych wersjach Pythona funkcja sort zaimplementowała zmodyfikowaną wersję quicksort. Jednak został uznany za niestabilny i od wersji 2.3 przeszli na używanie adaptacyjnego algorytmu scalania.


quicksort nie jest „uważany za niestabilny” - zgodnie z powszechnie używanymi definicjami quicksort jest niestabilny - to znaczy, że pierwotna kolejność dwóch obiektów nie jest zachowywana, jeśli są one równe podczas tego rodzaju. Niestabilny algorytm sortowania oznacza, że ​​musisz wymyślić wszelkiego rodzaju `` magię '', aby rozsądnie sortować dane według wielu kryteriów, zamiast po prostu móc po prostu łańcuchowo sortować połączenia - w sortowaniu czasu, jeśli chcesz sortować według DOB, a następnie nazwać , najpierw sortuj według nazwy, a następnie DOB Nie możesz tego zrobić za pomocą quicksort
Tony Suffolk 66
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.