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)…

Kamu sudah kenal tujuh cara mengurutkan, dari bubble sort sampai counting sort. Pelajaran ini menaruh semuanya berdampingan supaya kamu bisa memilih: mana yang cepat untuk datamu, mana yang hemat memori, dan mana yang menjaga urutan data yang nilainya sama. Gak ada satu sort yang menang di semua data.

🧪 Tebakan cepat: arr.sort() di Chrome dan Node.js memakai algoritma apa: quick sort, merge sort, atau campuran dua algoritma? Tebak dulu, jawabannya ada di bagian "Di JavaScript, pakai arr.sort()".

Satu data, beda pemenang

Di Lab, empat sort berlomba mengurutkan 7 angka yang sama, dan yang paling sedikit membandingkan menang. Banyaknya perbandingan:

Data Bubble Insertion Merge Quick
Acak [38, 27, 43, 3, 9, 82, 10] 21 15 13 11
Hampir terurut [3, 9, 10, 27, 38, 82, 43] 21 7 9 16
Terbalik [82, 43, 38, 27, 10, 9, 3] 21 21 11 21

Tiap pembalap dapat salinan data yang sama, supaya adil:

const data = [38, 27, 43, 3, 9, 82, 10];
const urut = [...data].sort((a, b) => a - b);

console.log(urut); // [3, 9, 10, 27, 38, 43, 82]
console.log(data); // [38, 27, 43, 3, 9, 82, 10]

Tabel perbandingan

Big-O bilang seberapa cepat kerja algoritma bertambah saat datanya bertambah. Untuk 1.000 angka: O(n) sekitar 1.000 langkah, O(n log n) sekitar 10.000, O(n²) sekitar 1.000.000.

Sort Terbaik Rata-rata Terburuk Memori tambahan Stabil
Bubble O(n) O(n²) O(n²) O(1) Ya
Selection O(n²) O(n²) O(n²) O(1) Tidak
Insertion O(n) O(n²) O(n²) O(1) Ya
Merge O(n log n) O(n log n) O(n log n) O(n) Ya
Quick O(n log n) O(n log n) O(n²) O(log n) Tidak
Heap O(n log n) O(n log n) O(n log n) O(1) Tidak
Counting O(n + k) O(n + k) O(n + k) O(n + k) Ya

Cara memilih

Di JavaScript, pakai arr.sort()

V8, mesin JavaScript di Chrome dan Node.js, memakai Timsort sejak 2018: campuran insertion sort untuk potongan kecil dan merge sort untuk menggabungkannya. Itu jawaban tebakannya. Timsort stabil, O(n log n) di kasus terburuk, dan cepat di data yang hampir terurut. Sejak ES2019, sort di semua browser wajib stabil. Jadi sehari-hari pakai arr.sort((a, b) => a - b). Menulis sort sendiri itu untuk belajar, atau untuk kasus khusus seperti counting sort.

⚠️ Jebakan yang sering ketemu

TL;DR: Pilih sort berdasarkan datanya. Hampir terurut atau kecil: insertion sort, yang terbaiknya O(n). Butuh stabil atau jaminan O(n log n): merge sort, dengan memori tambahan O(n). Data acak: quick sort, rata-rata tercepat tapi O(n²) di kasus terburuk dan gak stabil. Memori sempit: heap sort. Bilangan bulat rentang kecil: counting sort, O(n + k). Di JavaScript, arr.sort((a, b) => a - b) memakai Timsort (insertion plus merge sort), yang stabil dan cepat.

Yang akan kamu pelajari