b belajar.myudak

Sorting — dari bubble sampai quick sort

Lima algoritma pengurutan yang paling sering keluar di ujian, lengkap dengan animasi langkah demi langkah.

dasar #sorting#kompleksitas#divide and conquer

Sorting mengubah urutan elemen menjadi menaik (ascending) atau menurun (descending). Hampir semua algoritma lain memanfaatkannya: binary search butuh data terurut, mencari duplikat jadi mudah setelah diurutkan, dan seterusnya.

Coba putar animasinya. Warna kuning = sedang dibandingkan, merah = ditukar, hijau = sudah di posisi akhir.

Visualisasi sorting

Array awal

O(n²) · stabil · in-placePerbandingan: 0Penulisan: 0
langkah 1/103

Algoritma O(n²): sederhana tapi lambat

Bubble sort membandingkan pasangan bersebelahan dan menukarnya bila salah urutan. Setelah putaran ke-ii, elemen terbesar ke-ii “menggelembung” ke ujung kanan. Optimasi penting: jika satu putaran tidak ada pertukaran, berhenti.

Selection sort mencari minimum dari bagian yang belum urut, lalu menaruhnya di depan. Jumlah perbandingannya selalu n(n−1)2\frac{n(n-1)}{2}, tapi jumlah pertukarannya paling banyak n−1n-1. Berguna kalau menulis ke memori itu mahal.

Insertion sort seperti mengurutkan kartu di tangan: ambil satu kartu, sisipkan ke posisi yang tepat di bagian kiri yang sudah urut. Pada data yang hampir urut, insertion sort mendekati O(n)O(n). Coba tombol “Hampir urut” di atas.

Algoritma O(n log n): divide and conquer

Merge sort membagi array jadi dua, mengurutkan masing-masing secara rekursif, lalu menggabungkan dua bagian terurut. Pembagian menghasilkan log⁡2n\log_2 n level, dan tiap level butuh O(n)O(n) untuk merge:

T(n)=2 T(n/2)+O(n)  ⇒  T(n)=O(nlog⁡n)T(n) = 2\,T(n/2) + O(n) \;\Rightarrow\; T(n) = O(n \log n)

Quick sort memilih pivot, lalu mempartisi: elemen lebih kecil ke kiri, lebih besar ke kanan. Pivot langsung berada di posisi akhirnya. Rata-rata O(nlog⁡n)O(n \log n), tapi jika pivot selalu elemen terkecil/terbesar (misalnya data sudah urut dan pivot = elemen terakhir), kompleksitasnya jatuh ke O(n2)O(n^2).

Merge sort

Ringkasan

AlgoritmaTerbaikRata-rataTerburukMemoriStabil?
BubbleO(n)O(n)O(n2)O(n^2)O(n2)O(n^2)O(1)O(1)ya
SelectionO(n2)O(n^2)O(n2)O(n^2)O(n2)O(n^2)O(1)O(1)tidak
InsertionO(n)O(n)O(n2)O(n^2)O(n2)O(n^2)O(1)O(1)ya
MergeO(nlog⁡n)O(n \log n)O(nlog⁡n)O(n \log n)O(nlog⁡n)O(n \log n)O(n)O(n)ya
QuickO(nlog⁡n)O(n \log n)O(nlog⁡n)O(n \log n)O(n2)O(n^2)O(log⁡n)O(\log n)tidak
Flashcard0/5 dikuasai

Latihan: Urutkan Array (merge sort), Merge Two Sorted Arrays.