Bubble Sort — Algoritma

Bubble Sort membandingkan elemen berpasangan dan menukar jika urutannya salah. Elemen terbesar "menggelembung" ke akhir. Kompleksitas: O(n²) — lambat tapi…

Bubble sort mengurutkan array dengan membandingkan dua angka yang bersebelahan, lalu menukarnya kalau urutannya salah. Satu kali jalan dari kiri ke kanan disebut satu pass. Di tiap pass, angka terbesar yang belum di tempatnya terdorong ke kanan, kayak gelembung yang naik ke permukaan.

🧪 Tebakan cepat: array-nya sudah urut, [1, 2, 3, 4, 5]. Apa bubble sort tetap mengulang pass sampai habis? Tebak dulu, jawabannya ada di bagian "Berhenti lebih awal".

Cara kerjanya

Urutkan [64, 34, 25, 12, 22, 11, 90] dari kecil ke besar. Di pass 1, 64 dibandingkan dengan 34: lebih besar, jadi ditukar. Lalu dengan 25, ditukar lagi, begitu terus sampai ketemu 90 yang lebih besar, jadi 64 berhenti tepat sebelum 90.

Pass Yang terjadi Array sesudahnya
1 64 ditukar ke kanan sampai sebelum 90 [34, 25, 12, 22, 11, 64, 90]
2 34 ditukar ke kanan sampai sebelum 64 [25, 12, 22, 11, 34, 64, 90]
3 25 ditukar ke kanan sampai sebelum 34 [12, 22, 11, 25, 34, 64, 90]
4 22 ditukar dengan 11 [12, 11, 22, 25, 34, 64, 90]
5 12 ditukar dengan 11 [11, 12, 22, 25, 34, 64, 90]
6 gak ada yang ditukar [11, 12, 22, 25, 34, 64, 90]

Sesudah tiap pass, ujung kanan array sudah urut dan gak perlu disentuh lagi.

function bubbleSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // tukar
      }
    }
  }
  return arr;
}

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

Berhenti lebih awal

Kalau satu pass gak menukar apa pun, berarti semua tetangga sudah urut, dan sort-nya boleh berhenti. Caranya pakai flag swapped:

Jawaban tebakan: tanpa swapped, array yang sudah urut tetap dicek pass demi pass sampai habis. Dengan swapped, cukup satu pass, lalu berhenti.

Seberapa lambat

Banyaknya data disebut n. 7 angka butuh 6 + 5 + 4 + 3 + 2 + 1 = 21 perbandingan. Loop di dalam loop seperti ini ditulis O(n²): datanya dua kali lipat, waktunya kira-kira empat kali lipat. 100 angka butuh 4.950 perbandingan, 200 angka sudah 19.900.

Bubble sort gampang dipahami, tapi terlalu lambat untuk data besar. Untuk kerja sehari-hari, JavaScript sudah punya arr.sort((a, b) => a - b).

⚠️ Jebakan yang sering ketemu

💡 Bubble sort itu stabil. Dua angka yang sama gak pernah ditukar (karena >, bukan >=), jadi urutan aslinya tetap. Ini berguna waktu mengurutkan data seperti daftar siswa berdasarkan nilai.

TL;DR: Bubble sort membandingkan tetangga arr[j] dan arr[j + 1], lalu menukarnya kalau yang kiri lebih besar. Tiap pass mendorong angka terbesar yang tersisa ke kanan, jadi loop dalam cukup sampai arr.length - 1 - i. Jangan lupa return arr. Flag swapped menghentikan sort begitu satu pass gak menukar apa pun. Kecepatannya O(n²), dan O(n) untuk data yang sudah urut kalau pakai swapped.

Yang akan kamu pelajari