← Kembali ke DSA
⚡

Sorting (Pengurutan)

Quick Sort

Algoritma divide-and-conquer yang memilih pivot, mempartisi elemen di sekitarnya, lalu mengurutkan setiap partisi secara rekursif.

Kompleksitas

Waktu (Terbaik)

O(n log n)

Waktu (Rata-rata)

O(n log n)

Waktu (Terburuk)

O(n²)

Memori

O(log n)

Poin Penting

  • ›Rata-rata O(n log n) dengan konstanta sangat kecil, paling cepat dalam praktik untuk sebagian besar input
  • ›Kasus terburuk O(n²) terjadi pada input yang sudah terurut atau terbalik dengan pilihan pivot yang buruk
  • ›Pivot acak atau strategi median-of-three mencegah kasus terburuk
  • ›In-place: hanya butuh ruang stack O(log n) dari rekursi
  • ›Secara default tidak stable; dipakai di sebagian besar implementasi sort pada standard library

Visualizer Interaktif

Langkah 0 / 0✓ Selesai diurutkan!
LambatCepat
NormalDibandingkanDitukarTerurut

Contoh Kode

Swift
func quickSort(_ arr: inout [Int], _ low: Int, _ high: Int) {
    guard low < high else { return }
    let pi = partition(&arr, low, high)
    quickSort(&arr, low, pi - 1)
    quickSort(&arr, pi + 1, high)
}

func partition(_ arr: inout [Int], _ low: Int, _ high: Int) -> Int {
    let pivot = arr[high]
    var i = low - 1
    for j in low..<high {
        if arr[j] <= pivot { i += 1; arr.swapAt(i, j) }
    }
    arr.swapAt(i + 1, high)
    return i + 1
}

var nums = [10, 7, 8, 9, 1, 5]
quickSort(&nums, 0, nums.count - 1)
print(nums)  // [1, 5, 7, 8, 9, 10]

Latihan Soal

Kth Largest Element in an Array
Sort an Array
Wiggle Sort II