You are on page 1of 8

Quick Sort

Algoritmaquick sort diperkenalkanpertama kali oleh C.A.R. Hoare padatahun 1960.


Quick sort adalahalgoritma sorting yang berdasarkanpembandingandenganmetodedivide and
conquer (bagidankuasai).

Disebut Quick Sort, karenaAlgoritma quick sort mengurutkandengansangatcepat. Quick


sort disebutjugadengan partition exchange sort, karenakonsepnyamembuatpartisi-partisi, dan
sorting dilakukan per partisi.

Algoritma quick sort mengurutkandengansangatcepat,


namunalgoritmainisangatkomplexdandiprosessecararekursif.
Sangatmemungkinkanuntukmenulisalgoritma yang lebihcepatuntukbeberapakasuskhusus,
namununtukkasusumum, sampaisaatinitidakada yang lebihcepatdibandingkanalgoritma quick
sort.

Pivot
Dalamalgoritma quick sort, pemilihan pivot adalahhal yang menentukanapakahalgoritma
quick sort tersebutakanmemberikanperformaterbaikatauterburuk.
Berikutbeberapacarapemilihanpivot :

1. Pivot adalahelemenpertama, elementerakhir, atauelementengah array. Cara


inihanyabagusjikaelementabeltersusunsecaraacak,
tetapitidakbagusjikaelementabelsemulasudahterurut.
2. Pivot dipilihsecaraacakdarisalahsatuelemen array, Cara inibaik,
tetapibelumtentumaksimal, sebabmemerlukanprosedurkhususuntukmenentukan pivot
secaraacak.
3. Pivot adalahelemen median tabel. Cara ini paling bagus,
karenahasilpartisimenghasilkanduabagiantabel yang berukuranseimbang. Cara
inimemberikankompleksitaswaktu yang minimum. Masalahnya, mencari median
darielementabel yang belumterurutadalahpersoalantersendiri.

1|Rap(QUICK SORT)
Contoh :

Pada array dengandata :

6 2 9 5 4 1 7 3 8

Pada data tersebutakan di urutkanmenggunakanmetode quick sort


,padacontohakanmenggunakan pivot darititiktengahpada array menggunakanaritmatika :

pivot = (x+y)/2

pivot = (0+8)/2 = 4

 pivotnyaberadapadaindeks ke-4 yaitu = 4


 pada data awalx = adalahnilai paling kiridalamindeks array yaitu ( 0 ), x akanmemindai data
darisebelahkiridanakanmencari data yang lebihbesar / samadenganpivot, jika x menemukan
data yang lebihkecildari pivot maka x akanbergeserkekanan (x+1).
 pada data awal y = adalahnilai paling kanandalamindeks array yaitu ( 8 ),y akanmemindai
data darisebelahkanandanmencari data yang lebihkecil / samadengan pivot, jika y
menemukan data yang lebihbesardari pivot maka y akanbergeserkekiri (y-1).
 Jika x dan y menemukan data yang sesuaidengansyaratdiatasmakaposisidari data
tersebutakanditukar.

Indeks :

[0] [1] [2] [3] [4] [5] [6] [7] [8]

6 2 9 5 4 1 7 3 8
x y

Langkah 1: (data x > pivot) maka x berhentipadaindeks[0], (data y > pivot) maka y
akanberjalankekiri (y-1).

2|Rap(QUICK SORT)
6 2 9 5 4 1 7 3 8
x y

Langkah 2: x tetappadaindeks[0], (data y < pivot) maka y berhentipadaindeks[7]


dansyaratterpenuhimaka data padaindeks [0] dan [7] ditukar, setelahposisiditukarmaka x
bergeserkekanan (x+1) dan y bergeserkekiri (y-1).

3 2 9 5 4 1 7 6 8
x y

Langkah 3: (data x < pivot) maka x bergeserkekiri (x+1), (data y > pivot) maka y
akanbergeserkekanan (y-1).

3 2 9 5 4 1 7 6 8
x y

Langkah 4: (data x > pivot) maka x berhentipadaindeks[2], (data y < pivot) maka y
berhentipadaindeks[5] dansyaratterpenuhimaka data padaindeks [2] dan [5] ditukar,
setelahposisiditukarmaka x bergeserkekanan (x+1) dan y bergeserkekiri (y-1).

3 2 1 5 4 9 7 6 8
x y

Langkah 5: (data x > pivot) maka x berhentipadaindeks [3], (data y = pivot) maka y
berhentipadaindeks[4] dansyaratterpenuhimaka data padaindeks [3] dan [4] ditukar,
setelahposisiditukarmaka x bergeserkekanan (x+1) dan y bergeserkekiri (y-1).

3 2 1 4 5 9 7 6 8
y x

karena x > y makapembagianpartisitelahselesaidan array menjadi 2 bagian, seperti di


bawahinibagiankiridari pivot akanberisi data yang lebihkecildansebelahkanan pivot akanberisi
data yang lebihbesar.

3|Rap(QUICK SORT)
Maka sorting akanditeruskandenganmasing-masingpartisi,
yaitupartisikiriterlebihdahuludankemudianpartisikanan.

[0] [1] [2] [3] [4] [5] [6] [7] [8]

3 2 1 4 5 9 7 6 8

3 2 1
x y

Langkah 6: pivot padapartisikiriadalah (0+2)/2=1 makapivotnyaberadapadaindeks[1] = 2, maka


di cek (data x > pivot) maka x tetappadaindeks[0], (data y < pivot) dansyaratterpenuhimaka data
padaindeks [0] dan [2] ditukar, setelahposisiditukarmaka x bergeserkekanan (x+1=1) dan y
bergeserkekiri (y-1=1).

1 2 3

Makanilai x=y dan sorting untukpartisikiriselesai,


makaakandilanjutkandenganpartisikanan.

[0] [1] [2] [3] [4] [5] [6] [7] [8]

3 2 1 4 5 9 7 6 8

5 9 7 6 8
x y

Langkah 7: pivot padapartisikiriadalah (4+8)/2=6 makapivotnyaberadapadaindeks[6] = 7, maka


di cek (data x < pivot) maka x bergeserkekanan (x+1), (data y > pivot) maka y bergeserkekiri (y-
1).

[4] [5] [6] [7] [8]

4|Rap(QUICK SORT)
5 9 7 6 8

x y

Langkah 8: (data x > pivot) maka x berhentipadaindeks [5], (data y = pivot) maka y
berhentipadaindeks[7] dansyaratterpenuhimaka data padaindeks [5] dan [7] ditukar,
setelahposisiditukarmaka x bergeserkekanan (x+1=6) dan y bergeserkekiri (y-1=6).

[4] [5] [6] [7] [8]

5 6 7 9 8
Maka x=y maka sorting padapartisikananselesaidanterbagimenjadi 2 bagianpartisi :

kanan 1 kanan 2

5 6 9 8
x y

Langkah 9: padapartisikanan 1 pivotnyaadalah


(4+5)/2=4,5karenainttidakmengenalpecahanmakadibulatkanmenjadi 4 , pivot = [4] = 5 kemudian
di cek (data x = pivot) maka x tetap, di cek (data y > pivot) maka y mundursatulangkahmenjadi
y-1=5 sehingganilai x=y sorting selesaitanpaadanyaperubahan

[7] [8]

9 8
x y

Langkah 10: padapartisikanan 2 pivotnyaadalah (7+8)/2=7,5


karenainttidakmengenalpecahanmakadibulatkanmenjadi 7 , pivot = [7] = 9, kemudian di cek
(data x = pivot) maka x tetappadaindeks[7], (data y < pivot) dansyaratterpenuhimaka data
padaindeks [7] dan [8] ditukar, setelahposisiditukarmaka x bergeserkekanan (x+1=1) dan y
bergeserkekiri (y-1=1).

8 9
y x

5|Rap(QUICK SORT)
karena x > y maka sorting selesai.

Untuklebihjelasnyaperhatikangambarberikutini :

[0] [1] [2] [3] [4] [5] [6] [7] [8]

6 2 9 5 4 1 7 3 8
x y

6 2 9 5 4 1 7 3 8
x y

3 2 9 5 4 1 7 6 8
x y

3 2 9 5 4 1 7 6 8
x y

3 2 1 5 4 9 7 6 8
x y

3 2 1 4 5 9 7 6 8

3 2 1 5 9 7 6 8
x y x y

1 2 3 5 9 7 6 8
x y

1 3 5 6 7 9 8

1 3 5 6 9 8
x y x y

1 3 5 6 8 9

6|Rap(QUICK SORT)
1 2 3 4 5 6 7 8 9

Berikut Program untuk Quick Sort :

#include <iostream>
#include <conio.h>
using namespace std;
voidquick_sort(intarr[], int left, int right)
{
inti = left, j = right;inttmp;
int pivot = arr[(left+right)/2];/* partition */
while (i<j){
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i<=j){
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;j--;
};
}; /* recursion */
if (left < j)
quick_sort(arr, left, j);
if (i< right)
quick_sort(arr, i, right);
}

int main()
{
inti,n,data[50];
cout<<"Masukanbanyak data: ";cin>>n;
for(i=0;i<n;i++)
{cout<<"Masukan data ["<<i<<"] : ";cin>>data[i];}
cout<<"Data sebelumdiurutkan: "<<endl;
for(i=0;i<n;i++)
{
cout<<data[i]<<" ";
}cout<<"\n";
quick_sort(data,0,n-1);//hasilpengurutan
cout<<"hasilpengurutan:\n";
{
inti;
for (i=0;i<n;i++)
cout<<data[i]<<" ";
cout<<"\n";

7|Rap(QUICK SORT)
}getch();
}

8|Rap(QUICK SORT)

You might also like