Algoritma quick sort diperkenalkan pertama kali oleh C.A.R. Hoare pada tahun 1960,
dan dimuat sebagai artikel di Computer Journal 5 pada April 1962. Quick sort adalah
algoritma sorting yang berdasarkan pembandingan dengan metoda divide-and-conqueror.
Disebut Quick Sort, karena Algoritma quick sort mengurutkan dengan sangat cepat. Quick
sort disebut juga dengan partition exchange sort, karena konsepnya membuat partisi-partisi,
dan sort dilakukan per partisi.
Teknik mempartisi tabel:
(i) pilih x {a1, a2, , an} sebagai elemen pivot.
(ii) pindai (scan) tabel dari kiri sampai ditemukan elemen ap x.
(iii) pindai tabel dari kanan sampai ditemukan elemen aq x
(iv) pertukarkan ap <-> aq
(v) ulangi (ii) dari posisi p + 1, dan (iii) dari posisi q 1, sampai kedua pemindaian bertemu
di tengah tabel.
Algoritma quick sort mengurutkan dengan sangat cepat, namun algoritma ini sangat
komplex dan diproses secara rekursif. Sangat memungkinkan untuk menulis algoritma yang
lebih cepat untuk beberapa kasus khusus, namun untuk kasus umum, sampai saat ini tidak ada
yang lebih cepat dibandingkan algoritma quick sort.
Walaupun begitu algoritma quick sort tidak selalu merupakan pilihan yang terbaik. Seperti
yang telah disebutkan sebelumnya, algoritma ini dilakukan secara rekursif yang berarti jika
dilakukan untuk tabel yang berukuran sangat besar, walaupun cepat, dapat menghabiskan
memori yang besar pula. Selain itu, algoritma ini adalah algoritma yang terlalu komplex
untuk mengurutkan tabel yang berukuran kecil (hanya puluhan elemen misalnya). Selain itu
algoritma quick sort mempunyai tingkat efisiensi yang buruk ketika dioperasikan pada tabel
yang hampir terurut atau pada tabel yang terurut menurun.
Algoritma Quick Sort terdiri dari dua prosedur, yaitu prosedur PARTISI dan prosedur
QUICKSORT. Berikut pseudocode dari algoritma quick sort :
Procedure QuickSort (input/output a : array [1..n] of integer, input i , j : integer )
{mengurutkan tabel a[i..j] dengan algoritma quick sort. Masukkan: Tabel a[i..j] yang sudah
terdefinisi elemen-elemennya. Keluaran: Tabel a[i..j] yang terurut menaik.}
Deklarasi :
k : integer;
Algoritma :
if (i<j) then
Partisi(a,i,j,k) { Ukuran (a) > 1}
QuickSort(a,i,k)
QuickSort(a,k+1, j)
Endif
Procedure Partisi (input/output: a : array[1..n] of integer, input i , j : integer, output q :
integer)
{Membagi tabel a[i..j] menjadi subtabel a[i..q] dan a[q+1..j]. Keluaran upatabel a[i..q] dan
subtabel a[q+1..j]. Sedemikian sehingga elemen tabel a[i..q] lebih kecil dari elemen tabel
a[q+1..j]}
Deklarasi :
Pivot, temp : integer
Algoritma :
Sedikit kesalahan dalam penulisan program membuatnya bekerja tidak beraturan (hasilnya
tidak benar atau tidak pernah selesai).
Memiliki ketergantungan terhadap data yang dimasukkan, yang dalam kasus terburuk
memiliki kompleksitas O(n2).
Secara umum bersifat tidak stable, yaitu mengubah urutan input dalam hasil akhirnya (dalam
hal inputnya bernilai sama).
Pada penerapan secara rekursif (memanggil dirinya sendiri) bila terjadi kasus terburuk dapat
menghabiskan stack dan memacetkan program.