Tentang metode sort () bawaan Python


104

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


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 ;-).


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


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.