Perbandingan Sorting — Algoritma

Sekarang kamu sudah tahu berbagai sorting algorithm. Mari bandingkan semuanya. Tabel Perbandingan Algoritma Best Average Worst Space Stabil? Bubble Sort O(n) O(

Sekarang kamu sudah tahu berbagai sorting algorithm. Mari bandingkan semuanya.

Tabel Perbandingan

Algoritma Best Average Worst Space Stabil?
Bubble Sort O(n) O(n²) O(n²) O(1) Ya
Selection Sort O(n²) O(n²) O(n²) O(1) Tidak
Insertion Sort O(n) O(n²) O(n²) O(1) Ya
Merge Sort O(n log n) O(n log n) O(n log n) O(n) Ya
Quick Sort O(n log n) O(n log n) O(n²) O(log n) Tidak
Counting Sort O(n+k) O(n+k) O(n+k) O(k) Ya

Kapan Pakai Yang Mana?

Data kecil (< 50 elemen):Insertion Sort — overhead rendah, cepat untuk data kecil

Data hampir terurut:Insertion Sort — best case O(n)

Butuh jaminan O(n log n):Merge Sort — konsisten, stabil

Data besar, performa umum terbaik:Quick Sort — paling cepat secara praktis

Data integer dengan range kecil:Counting Sort — O(n), super cepat

Butuh stabilitas:Merge Sort atau Insertion Sort

JavaScript Built-in Sort

// Array.sort() di V8 menggunakan TimSort
// TimSort = Merge Sort + Insertion Sort

const arr = [3, 1, 4, 1, 5, 9, 2, 6];
arr.sort((a, b) => a - b); // [1, 1, 2, 3, 4, 5, 6, 9]

Tip: Untuk kode production, gunakan built-in .sort() kecuali ada kebutuhan spesifik. Tapi pahami cara kerja sorting agar bisa memilih pendekatan yang tepat.

🎭 Analogi sehari-hari: Pilih cara packing barang pindahan rumah. Banyak teknik:

Pilih sesuai kondisi. Gak ada satu sort yang menang semua.

💡 Comparison sort theoretical lower bound = O(n log n). Buktinya: ada n! kemungkinan permutasi, butuh log₂(n!) ≈ n log n perbandingan minimum untuk membedakan. Itu kenapa Counting Sort bisa lebih cepat (gak comparison).

⚠️ Jebakan umum saat pilih sort:

🎯 Decision tree pilih sort:

  1. Data kecil (<50)? → Insertion atau builtin
  2. Data sudah hampir sorted? → Insertion
  3. Data integer range kecil? → Counting / Radix
  4. Butuh stable? → Merge / TimSort
  5. Memory tight? → Heap
  6. Data besar acak? → Quick atau builtin (TimSort)
  7. 99% kasus: pakai .sort() builtin

🧪 Tebakan cepat: Sort 1jt transaksi by tanggal lalu by jumlah. Pakai Quick Sort? Bisa salah karena tidak stable — transaksi dengan tanggal sama bisa keluar urutan jumlah. Pakai Merge Sort atau TimSort builtin (stable).

TL;DR: Sort algorithm bukan one-size-fits-all. Pilih berdasar: ukuran data, sifat data, stability, memory. 99% praktiknya pakai .sort() builtin (TimSort). Hafalin trade-off untuk interview & corner cases.