Tentang metode sort () bawaan Python

104

Algoritme apa yang digunakan sort()metode bawaan dengan Python? Apakah mungkin untuk melihat kode untuk metode itu?

Johannes
sumber
10
Tentu saja dimungkinkan untuk melihat kode untuk metode ini - Python adalah proyek sumber terbuka. Metode ini mungkin diterapkan di C, jadi Anda harus tahu sedikit tentang C untuk memahaminya.
Chris Lutz
Apakah versinya penting?
meder omuraliev
@ Melder: Tidak =) Saya hanya ingin melihat algoritma pro: P @chris: bagaimana?
Johannes
3
Unduh kode sumber ke interpreter Python. Saya tidak tahu di mana mereka menerapkan sort()metode ini, atau apa pemformatannya ke penerjemah, tetapi harus ada di sana di suatu tempat, dan saya yakin ini diterapkan di C karena masalah kecepatan.
Chris Lutz
Berikut adalah contoh yang digunakan
Hari Ganesan

Jawaban:

119

Tentu! Kode ada di sini , dimulai dengan fungsi isltdan dilanjutkan untuk CUKUP beberapa saat ;-). Seperti komentar Chris, ini adalah kode C. Anda juga akan ingin membaca file teks ini untuk penjelasan tekstual, hasil, dll.

Jika Anda lebih suka membaca kode Java daripada kode C, Anda dapat melihat implementasi Joshua Bloch dari timsort di dan untuk Java (Joshua juga orang yang mengimplementasikan, pada tahun 1997, mergesort yang dimodifikasi yang masih digunakan di Java, dan orang dapat berharap bahwa Java akan akhirnya beralih ke port timsort terbarunya).

Beberapa penjelasan tentang port Java timsort ada di sini , perbedaannya ada di sini (dengan petunjuk ke semua file yang dibutuhkan), file kuncinya ada di sini - FWIW, sementara saya programmer C yang lebih baik daripada programmer Java, dalam hal ini saya temukan Kode Java Joshua lebih mudah dibaca secara keseluruhan daripada kode C Tim ;-).

Alex Martelli
sumber
4
@Chris, "Jelajahi sumber Python" adalah pintasan di semua bilah bookmark browser saya - mengarah ke svn.python.org/view/python/trunk ;-).
Alex Martelli
Saya ingin tahu apa fungsinya list_ass_item(). :)
Chris Lutz
2
Melakukan penugasan ke item dari daftar (seperti list_ass_slice melakukan penugasan ke sepotong daftar), tidak ada hubungannya dengan penyortiran. Saya kira singkatan dari "tugas" membuat nama itu lucu ...
Alex Martelli
3
Versi saat ini dari listsort.txtmenambahkan beberapa catatan yang kebingungan alamat umum.
Tim Peters
31

Saya hanya ingin memberikan tautan yang sangat membantu yang saya lewatkan dalam jawaban Alex yang sebaliknya komprehensif: Penjelasan tingkat tinggi tentang timsort Python (dengan visualisasi grafik!).

(Ya, algoritme pada dasarnya dikenal sebagai Timsort sekarang)

u0b34a0f6ae
sumber
9

Pada versi python awal, fungsi sortir menerapkan versi quicksort yang dimodifikasi. Namun, itu dianggap tidak stabil dan sejak 2.3 mereka beralih menggunakan algoritme mergesort adaptif.

Silfverstrom
sumber
quicksort tidak 'dianggap tidak stabil' - menurut definisi yang umum digunakan, quicksort tidak stabil - yaitu urutan asli dua objek tidak dipertahankan, jika sama selama pengurutan ini. Memiliki algoritme pengurutan yang tidak stabil berarti Anda harus menemukan semua jenis 'keajaiban' untuk mengurutkan data dengan bijak dengan beberapa kriteria, daripada sekadar dapat melakukan panggilan pengurutan secara berantai - dalam urutan waktu jika Anda ingin mengurutkan berdasarkan DOB dan kemudian menamainya , Anda cukup mengurutkan menurut nama dulu, lalu DOB Anda tidak dapat melakukannya dengan quicksort
Tony Suffolk 66