Menu
CoddyTech

Selection Sort

Terakhir diperbarui

Selection sort adalah algoritma pengurutan yang membagi array menjadi bagian terurut di kiri dan bagian belum terurut di kanan. Pada setiap putaran, algoritma ini memindai bagian yang belum terurut untuk mencari elemen terkecil, lalu menukarnya ke posisi pertama yang belum terurut, sehingga bagian terurut bertambah satu. Tekan Putar di atas untuk melihat proses pindai dan tukarnya, atau jalankan satu perbandingan demi satu perbandingan.

Selection sort selalu melakukan jumlah perbandingan yang sama apa pun inputnya, tetapi melakukan paling banyak n-1 penukaran, jauh lebih sedikit daripada bubble sort, dan hal ini bisa penting saat penulisan ke memori mahal.

Kompleksitas waktu dan ruang

KasusKompleksitasCatatan
Kasus terbaikO(n²)Perbandingan tetap terjadi meskipun sudah terurut
Kasus rata-rataO(n²)Urutan acak
Kasus terburukO(n²)Terurut terbalik
RuangO(1)In-place
StabilTidakPenukaran bisa mengubah urutan elemen yang sama

Langkah demi langkah

LangkahApa yang terjadi
1Anggap seluruh array belum terurut.
2Pindai bagian yang belum terurut untuk mencari elemen minimum.
3Tukar elemen minimum itu ke posisi pertama yang belum terurut.
4Geser batasnya satu langkah ke kanan (slot itu kini sudah terurut).
5Ulangi sampai hanya tersisa satu elemen yang belum terurut.

Contoh penerapan

Mengurutkan [5, 2, 4, 1]:

PutaranArrayAksi
Mulai[5, 2, 4, 1]Seluruh array belum terurut.
1[1, 2, 4, 5]Pindai [5, 2, 4, 1], minimumnya 1 di indeks 3; tukar dengan indeks 0.
2[1, 2, 4, 5]Pindai [2, 4, 5], minimumnya 2 yang sudah di indeks 1; ditukar dengan dirinya sendiri.
3[1, 2, 4, 5]Pindai [4, 5], minimumnya 4 yang sudah di indeks 2; tidak perlu dipindahkan.
Selesai[1, 2, 4, 5]Hanya tersisa 5, jadi elemen itu sudah di tempatnya.

Kapan memakai selection sort

Pakai saatHindari saat
Penulisan ke memori mahal: algoritma ini melakukan paling banyak n-1 penukaran.Array-nya besar: perbandingan O(n²) mendominasi.
Kamu butuh pengurutan in-place yang sederhana dan mudah diimplementasikan.Kamu butuh pengurutan stabil yang mempertahankan urutan key yang sama.
Memori terbatas: algoritma ini hanya memakai ruang tambahan O(1).Datanya hampir terurut: algoritma ini tidak bisa selesai lebih awal seperti insertion sort.
Datanya sangat kecil dan performa yang bisa diprediksi itu penting.Throughput penting: pengurutan O(n log n) seperti quicksort jauh lebih cepat.

Kode Selection Sort

Implementasi Selection Sort yang rapi dan siap dijalankan dalam Python, JavaScript, Java, C++, C, Pseudocode. Pilih bahasa, salin kodenya, atau buka langsung di Coddy Playground.

Kode Selection Sort dalam Python

Python
1def selection_sort(a):2    n = len(a)3    for i in range(n - 1):4        # Find the smallest element in the unsorted tail5        min_idx = i6        for j in range(i + 1, n):7            if a[j] < a[min_idx]:8                min_idx = j9        a[i], a[min_idx] = a[min_idx], a[i]10    return a11
12
13nums = [64, 25, 12, 22, 11]14print("Before:", nums)15selection_sort(nums)16print("After: ", nums)
Jalankan kode ini di Playground Python

FAQ Selection Sort

Berapa kompleksitas waktu selection sort?
Selection sort bernilai O(n²) pada semua kasus, baik terbaik, rata-rata, maupun terburuk, karena selalu memindai seluruh bagian yang belum terurut untuk mencari setiap nilai minimum. Ruang tambahan yang dipakai O(1).
Apakah selection sort stabil?

Versi in-place standarnya tidak stabil, karena menukar nilai minimum yang letaknya jauh ke tempatnya bisa memindahkan sebuah elemen melewati elemen lain yang nilainya sama. Ada varian yang stabil, tetapi butuh pergeseran alih-alih penukaran.

Kapan selection sort berguna?
Selection sort berguna saat biaya menulis ke memori tinggi, karena algoritma ini melakukan paling banyak n-1 penukaran, jumlah paling sedikit yang mungkin untuk pengurutan berbasis perbandingan yang memindahkan elemen.
Apa perbedaan selection sort dan bubble sort?
Keduanya adalah pengurutan berbasis perbandingan O(n²), tetapi selection sort melakukan paling banyak n-1 penukaran, sedangkan bubble sort bisa melakukan hingga O(n²) penukaran. Bubble sort juga bisa mendeteksi array yang sudah terurut dan berhenti lebih awal, sementara selection sort selalu menjalankan seluruh putarannya.
Sebaiknya memakai selection sort atau insertion sort?
Pilih insertion sort di sebagian besar kasus: algoritma ini stabil, berjalan dalam O(n) pada data yang hampir terurut, dan rata-rata lebih cepat. Pilih selection sort hanya saat meminimalkan jumlah penulisan menjadi prioritas, karena algoritma ini menjamin paling banyak n-1 penukaran.
Mengapa selection sort selalu berjalan dalam O(n²), bahkan pada array yang sudah terurut?
Selection sort tidak punya cara untuk mengetahui bahwa sebuah elemen sudah merupakan nilai minimum tanpa memindai sisa bagian yang belum terurut, jadi algoritma ini melakukan setiap perbandingan di setiap putaran apa pun urutan inputnya. Artinya, kasus terbaiknya sama dengan kasus terburuknya, yaitu O(n²), tidak seperti insertion sort atau bubble sort yang bisa berhenti lebih awal.
Ilustrasi bahasa pemrograman di Coddy

Kuasai algoritma bersama Coddy

Mulai