Quicksort merupakan Algoritma Sorting yang
dikembangkan oleh Tony Hoare yang, secara kasus rata-rata, membuat
pengurutan O(n log n) untuk mengurutkan n item.
Algoritma ini juga dikenal sebagai Partition-Exchange Sort atau disebut sebagai Sorting Pergantian Pembagi. Pada kasus terburuknya, algoritma ini membuat perbandingan O(n2), malaupun kejadian seperti ini sangat langka. Quicksort sering lebih cepat dalam praktiknya dari pada algoritma O(n log n) yang lainnya. Dan juga, urutan dan referensi lokalisasi memori quicksort bekerja lebih baik dengan menggunakan cache CPU, jadi keseluruhan sorting dapat dilakukan hanya dengan ruang tambahan O(log n).
Algoritma ini juga dikenal sebagai Partition-Exchange Sort atau disebut sebagai Sorting Pergantian Pembagi. Pada kasus terburuknya, algoritma ini membuat perbandingan O(n2), malaupun kejadian seperti ini sangat langka. Quicksort sering lebih cepat dalam praktiknya dari pada algoritma O(n log n) yang lainnya. Dan juga, urutan dan referensi lokalisasi memori quicksort bekerja lebih baik dengan menggunakan cache CPU, jadi keseluruhan sorting dapat dilakukan hanya dengan ruang tambahan O(log n).
Quicksort
merupakan sorting pembanding dan pada implementasi efisien tidak merupakan
algoritma sorting yang stabil.
Algoritma
Quicksort
merupakan Algoritma Pembagi. Pertama sekali quicksort membagi list yang
besar menjadi dua buah sub list yang lebih kecil: element kecil dan element
besar. Quicksort kemudian dapat menyortir sub list itu secara rekursif.
Langkah-Langkah
pengerjaannya ialah:
- Ambil sebuah elemen, yang disebut dengan pivot, pada sebuah daftar.
- Urutkan kembali sebuah list sehingga elemen dengan nilai yang kecil dari pivot berada sebelum pivot, sedangkan seluruh element yang memiliki nilai yang lebih besar dari pivot berada setelahnya (nilai yang sama dapat berada pada pivot setelahnya). Setelah pemisahan, pivot berada pada posisi akhirnya. Operasi ini disebut Partition.
- Sub list kemudian disortir secara recursif dari elemen yang lebih kecil dan sub list dari elemen yang lebih besar.
Kasus
dasar dari rekusrif ialah list dari besaran nol atau satu, yang tidak perlu
untuk di sorting.
Versi Sederhana
Dalam
Pseudocode sederhana, Algoritmanya dapat dinyatakan sebagai berikut:
function
quicksort('array') if length('array') ≤ 1 return 'array' // an array of zero or one elements is already sorted select and remove a pivot value 'pivot' from 'array' create empty lists 'less' and 'greater' for each 'x' in 'array' if 'x' ≤ 'pivot' then append 'x' to 'less' else append 'x' to 'greater' return concatenate(quicksort('less'), 'pivot', quicksort('greater')) // two recursive call.
Contoh keseluruhan dari quicksort pada kumpulan acak dari
angka. Element yang gelap merupakan pivot. Pivot selalu dipilih sebagai element
terakhir pada partisi. Bagaimanapun, selalu memilih elemen terakhir pada
partisi sebagai pivot sehingga hasil pada kasus terburuk () pada daftar yang
telah diurutkan, atau daftar yang serupa. Karena elemen yang sama memotong
hingga pada akhir dari prosedur soring pada jumlah yang besar, versi dari
algoritma quicksort yang memilih pivot sebagai elemen tengah berjalan lebih
cepat dari pada algortima yang dijelaskan pada diagram ini pada sejumlah besar
angka.
Perlu diperhatikan bahwa kita hanya memeriksa
elemen dengan membandingkan mereka pada elemen yang lain. Prosedur ini disebuk Sorting
Pembandingan. Jenis ini juga merupakan jenis sorting yang stabil
(asumsikan bahwa untuk setiap method menerima elemen pada urutan aslinya
dan pivot yang dipilih merupakan elemen terakhir dari nilai yang sama).Kebenaran dari algoritma partisi didasari pada dua argumen berikut:
- Pada setiap iterasi, seluruh elemen diproses selama ini berada pada posisi yang diinginkan: sebelum pivot lebih kurang dari nilai pivot, setelah pivot lebih besar dari nilai pivot (Invarian Loop).
Partisi ditepat bekerja pada daftar yang kecil. Elemen kotak
merupakan element pivot, elemen berwarna biru merupakan elemen yang bernilai
kecil atau sama, dan elemen yang berwarna merah lebih besar.
Itulah sedikit informasi semoga bermanfaat