Selection Sort — Algoritma

Selection Sort mencari elemen terkecil dan menaruhnya di posisi yang benar, satu per satu. Kompleksitas: O(n²) — selalu, tidak ada best case Cara kerja: Cari…

Selection sort mengurutkan array dengan cara memilih: cari angka terkecil, taruh di depan. Lalu cari yang terkecil dari sisanya, taruh di posisi kedua, dan seterusnya. Kayak menyusun kartu di meja: ambil yang paling kecil dulu, lalu yang paling kecil berikutnya.

🧪 Tebakan cepat: array-nya sudah urut. Apa selection sort jadi lebih cepat? Tebak dulu, jawabannya ada di bagian "Seberapa lambat".

Cara kerjanya

Urutkan [64, 25, 12, 22, 11]. Satu pass mengisi satu posisi, mulai dari kiri: cari yang terkecil dari bagian yang belum urut, lalu tukar sekali ke depan bagian itu.

Pass Yang terjadi Array sesudahnya
1 terkecil dari semua: 11, tukar dengan 64 [11, 25, 12, 22, 64]
2 terkecil dari sisa: 12, tukar dengan 25 [11, 12, 25, 22, 64]
3 terkecil dari sisa: 22, tukar dengan 25 [11, 12, 22, 25, 64]
4 terkecil dari sisa: 25, sudah di tempatnya [11, 12, 22, 25, 64]

Angka terakhir yang tersisa pasti yang terbesar, jadi 5 angka cukup 4 pass.

function selectionSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    let minIdx = i; // cari yang terkecil dari sisa array
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[minIdx]) minIdx = j;
    }
    if (minIdx !== i) {
      [arr[i], arr[minIdx]] = [arr[minIdx], arr[i]]; // paling banyak satu tukar per pass
    }
  }
  return arr;
}

console.log(selectionSort([64, 25, 12, 22, 11]).join(",")); // 11,12,22,25,64

Seberapa lambat

Banyaknya data disebut n. Selection sort selalu mengecek semua sisa, apa pun datanya: 5 angka butuh 4 + 3 + 2 + 1 = 10 perbandingan, bahkan kalau sudah urut. Jadi jawaban tebakannya: gak lebih cepat. Perbandingannya O(n²) di semua kasus: datanya dua kali lipat, waktunya kira-kira empat kali lipat.

Kelebihannya ada di jumlah tukar: paling banyak satu tukar per pass, jadi paling banyak n - 1 tukar. Itu O(n) tukar: datanya dua kali lipat, tukarnya paling banyak dua kali lipat. Bubble sort bisa menukar sampai O(n²) kali. Karena itu selection sort cocok kalau menulis atau memindahkan data itu mahal.

⚠️ Jebakan yang sering ketemu

🎯 Bubble, selection, atau insertion?

Bubble sort Selection sort Insertion sort
Tiap pass tukar tetangga yang salah urut cari yang terkecil, tukar sekali sisipkan satu angka ke bagian kiri yang sudah urut
Data sudah urut O(n) dengan swapped tetap O(n²) O(n)
Banyak tukar bisa O(n²) paling banyak n - 1 geser bisa O(n²)
Stabil ya tidak ya

Stabil artinya dua nilai yang sama tetap di urutan aslinya, misalnya dua siswa dengan nilai yang sama tetap di urutan daftar awal. Insertion sort ada di materi berikutnya.

TL;DR: Selection sort mengisi posisi dari kiri: di tiap pass, cari index terkecil (minIdx) dari sisa array, lalu tukar sekali ke posisi i. Simpan index-nya, tukar sesudah loop dalam, dan return arr. Perbandingannya selalu O(n²), bahkan untuk data yang sudah urut, tapi tukarnya paling banyak n - 1, jadi O(n). Selection sort gak stabil.

Yang akan kamu pelajari