1. pivotitem = S [rendah] 2. k=low
3. for j = low +1 tinggi 4. lakukan if S [ j ] pivot item
5. Kemudian k = k + 1 6. Ganti S [ j ] dan m [ k ]
7. pivot = k 8. Ganti S[low] dan S[pivot]
Quicksort adalah algoritma sorting acak berdasarkan paradigma Divide and Conquer Divide: memilih elemen acak dari x pivot dan partisi m ke dalam
L elements lebih kecil dari x E elements sama dengan x
G elements lebih besar dari x Recursive: sorting L dan G
Conquer: gabungkan L, E dan G
2.3.1 Metode Rekursif dalam Algoritma Quicksort
Quicksort dengan pendekatan rekursif tidak membutuhkan struktur data khusus, seperti stack, karena setiap kelompok akan berjalan secara rekursif. Robert Sedgewick Kevin
Wayne 2011 menyatakan bahwa terdapat dua bagian pada pendekatan rekursif, yaitu sort dan partisi. Partisi merupakan bagian yang melakukan tugas untuk
mengelompokkan data, sedangkan sort adalah bagian yang melakukan proses rekursif. Semakin besar jumlah data, maka kompleksitas ruang suatu algoritma rekursif akan
semakin besar.
Sedgewick Wayne 2011 juga menyatakan bahwa terdapat tiga kasus kompleksitas waktu pada penggunaan algoritma Quicksort. Pertama adalah kasus
terbaik, yaitu ketika proporsi data yang ingin diurutkan seimbang. Seimbang adalah keadaan di mana kelompok kiri dan kelompok kanan memiliki jumlah anggota
kelompok yang relatif sama. Biasanya kasus ini terjadi jika memakai pivot berupa nilai median. Kasus terbaik algoritma Quicksort memiliki kompleksitas n log n. Kedua adalah
kasus terburuk, yaitu ketika semua elemen, kecuali pivot, hanya berada di salah satu
Universitas Sumatera Utara
kelompok sehingga kelompok lainnya menjadi kosong. Hal ini akan menyebabkan terjadinya banyak pengulangan pada saat pengurutan data. Nilai pivot pada kasus ini
biasanya adalah nilai maksimum atau minimum dari kelompok data yang ingin diurutkan. Kompleksitas dari kasus terburuk ini adalah ½ n
2
. Kondisi yang ketiga adalah kasus rata-rata, yaitu ketika pivot tidak terpilih secara acak dari data. Kompleksitas dari
kasus rata-rata sama dengan kasus terbaik adalah 1.39 n log n.
2.3.2 Implementasi Quicksort
Implementasi Quicksort Abdul. K, 2012. Algoritma:
Subrutin QuicksortL,p,r Jika p r MAKA
q partisi L,p,r QuicksortL,p,q
QuicksortL,q+1,r Akhir-jika
Akhir – subrutin
Untuk mengurutkan isi keseluruhan Larik L, diperlukan pemanggilan seperti berikut: QuicksortL,O, jumlah-elemenL-1
Subrutin partisi sendiri seperti berikut: Subrutin partisiL,p,r
x L[p] i p
j r Ulang selama benar
Ulang selama L[j] x j j -1
Akhir-ulang Ulang selama L[j] x
i i – 1
Akhir-ulang Jika i j maka
Universitas Sumatera Utara
Tukarkan L[i] dengan L[j] tmp L[i]
L[i] L[j] L[j] tmp
Sebaliknya Nilai
– balik J Akhir-jika
Akhir – ulang
Akhir - subrutin
Abdul 2012 Pertama-tama x L[p] dipakai untuk membagi larik L[p..r] menjadi 2 bagian disebut pemartisian dengan kondisi semua elemen bagian kiri selalu
lebih kecil daripada nilai elemen pivot dan nilai semua elemen pivot. Pemartisian dilakukan dengan menggunakan variabel i dan j. Dalam hal ini i berupa penunjuk yang
bergerak turun.Variabel i dinaikkan secara terus menerus sehingga L[i] = elemen pivot dan variabel j diturunkan secara terus-menerus sehingga L[j] = elemen pivot. Proses
pengulangan dilakukan sampai nilai i = j. Pada keadaan seperti ini nilai balik subrutin partisi berupa j. Seperti pada gambar 2.1 dibawah :
Universitas Sumatera Utara
1 2
3 4
5 6
7 Pivot
L[0]yaitu 6
i j
Setelah i digerakkan ke kanan sampai L[i] = 6
i j
dan setelah j digerakkan ke kiri sampai L[j]=6
Setelah penukaran L[i] dan L[j] dilaksanakan
i j
Setelah i digerakkan ke kanan sampai L[i] =6
i j
Ke kiri sampai L[j]=6 Setelah penukaran L[i]
dan L[j] dilaksanakan i j
Setelah i digerakkan ke kanan sampai L[i] = 6
j i
dan setelah j digerakkan Ke kiri sampai L[j]=6
Karena ij tidak berlaku lagi,maka nilai balik berupa j
1 2
3 4
5 6
7 7
6 8
L[0..4] L[5..7]
Gambar 2.1 Keadaan setelah pivot didapatkan
6 2
4 3
7 5
4 8
6 2
4 3
7 5
4 8
4 2
4 3
7 5
6 8
4 2
4 3
7 5
6 8
4 2
4 3
5 7
6 8
4 2
4 3
5 7
6 8
4 2
4 3
5
Universitas Sumatera Utara
2.3.3 Kasus terburuk Running Time Quicksort