Pengurutan Cepat dan Penerapannya · Pelajaran 9 dari 10

Sort bawaan Python dan kunci pengurutan

8 menit baca · BelajarCode

Dalam program sungguhan, kamu hampir selalu memakai pengurutan bawaan. Python memakai algoritma hibrida turunan merge sort dan insertion sort yang dikenal sebagai Timsort. Algoritma ini O(n log n), stabil, dan sangat cepat untuk data yang sebagian sudah urut.

sorted dan sort

Python
1nilai = [72, 85, 64, 91]2urut = sorted(nilai)3print(urut, nilai)4nilai.sort(reverse=True)5print(nilai)
Keluaran
[64, 72, 85, 91] [72, 85, 64, 91]
[91, 85, 72, 64]
  • sorted(data) membuat list baru dan tidak mengubah aslinya. Bisa dipakai untuk string, tuple, dan koleksi lain.
  • data.sort() mengurutkan list itu sendiri dan mengembalikan None.

Kunci pengurutan

Parameter key menerima fungsi yang menentukan apa yang dibandingkan.

Python
1siswa = [("Citra", 85), ("Andi", 92), ("Bela", 85), ("Dimas", 78)]2print(sorted(siswa, key=lambda s: s[1], reverse=True))3print(sorted(["jeruk", "Apel", "mangga", "Belimbing"], key=str.lower))
Keluaran
[('Andi', 92), ('Citra', 85), ('Bela', 85), ('Dimas', 78)]
['Apel', 'Belimbing', 'jeruk', 'mangga']

Tanpa key=str.lower, huruf besar diurutkan sebelum semua huruf kecil, sehingga "Apel" dan "Belimbing" berada di depan "jeruk" karena alasan yang salah.

Beberapa kriteria sekaligus

Jika kunci berupa tuple, Python membandingkan elemen pertama dulu, lalu elemen kedua jika yang pertama sama. Untuk mengurutkan nilai dari besar ke kecil tetapi nama dari A ke Z, nilai dijadikan negatif:

Python
1siswa = [("Citra", 85), ("Andi", 92), ("Bela", 85), ("Dimas", 78)]2peringkat = sorted(siswa, key=lambda s: (-s[1], s[0]))3for posisi, (nama, nilai) in enumerate(peringkat, start=1):4    print(posisi, nama, nilai)
Keluaran
1 Andi 92
2 Bela 85
3 Citra 85
4 Dimas 78

Memanfaatkan sifat stabil

Karena pengurutan Python stabil, kamu juga bisa mengurutkan dua kali: mulai dari kriteria yang paling tidak penting.

Python
1siswa = [("Citra", 85), ("Andi", 92), ("Bela", 85), ("Dimas", 78)]2siswa.sort(key=lambda s: s[0])3siswa.sort(key=lambda s: s[1], reverse=True)4print(siswa)
Keluaran
[('Andi', 92), ('Bela', 85), ('Citra', 85), ('Dimas', 78)]

Pengurutan kedua tidak merusak urutan nama untuk nilai yang sama, karena stabil.

Cek pemahaman

Apa yang dikembalikan oleh [3, 1, 2].sort()?

Latihan

Urutkan peserta lomba

Urutkan peserta lomba berdasarkan skor tertinggi. Jika skornya sama, yang waktunya lebih cepat (detik lebih kecil) di depan. Data: Andi (90, 120 detik), Bela (95, 150 detik), Citra (90, 100 detik), Dimas (95, 140 detik).

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.

Latih konsep ini

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi