metode quick sort

10
Quick Sort Algoritma quick sort diperkenalkan pertama kali oleh C.A.R. Hoare pada tahun 1960. Quick sort adalah algoritma sorting yang berdasarkan pembandingan dengan metode divide and conquer (bagi dan kuasai). 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 sorting dilakukan per partisi. 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. Pivot Dalam algoritma quick sort, pemilihan pivot adalah hal yang menentukan apakah algoritma quick sort tersebut akan memberikan performa terbaik atau terburuk. Berikut beberapa cara pemilihan pivot : 1. Pivot adalah elemen pertama, elemen terakhir, atau elemen tengah array. Cara ini hanya bagus jika elemen tabel tersusun secara acak, tetapi tidak bagus jika elemen tabel semula sudah terurut. 1 | Rap(QUICK SORT)

Upload: kahfi

Post on 11-Feb-2016

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Metode Quick Sort

Quick Sort

Algoritma quick sort diperkenalkan pertama kali oleh C.A.R. Hoare pada tahun 1960.

Quick sort adalah algoritma sorting yang berdasarkan pembandingan dengan metode divide and

conquer (bagi dan kuasai).

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 sorting dilakukan per partisi.

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.

Pivot

Dalam algoritma quick sort, pemilihan pivot adalah hal yang menentukan apakah

algoritma quick sort tersebut akan memberikan performa terbaik atau terburuk. Berikut beberapa

cara pemilihan pivot :

1. Pivot adalah elemen pertama, elemen terakhir, atau elemen tengah array. Cara ini hanya

bagus jika elemen tabel tersusun secara acak, tetapi tidak bagus jika elemen tabel semula

sudah terurut.

2. Pivot dipilih secara acak dari salah satu elemen array, Cara ini baik, tetapi belum tentu

maksimal, sebab memerlukan prosedur khusus untuk menentukan pivot secara acak.

3. Pivot adalah elemen median tabel. Cara ini paling bagus, karena hasil partisi

menghasilkan dua bagian tabel yang berukuran seimbang. Cara ini memberikan

kompleksitas waktu yang minimum. Masalahnya, mencari median dari elemen tabel yang

belum terurut adalah persoalan tersendiri.

1 | R a p ( Q U I C K S O R T )

Page 2: Metode Quick Sort

Contoh :

Pada array dengan data :

6 2 9 5 4 1 7 3 8

Pada data tersebut akan di urutkan menggunakan metode quick sort , pada contoh akan

menggunakan pivot dari titik tengah pada array menggunakan aritmatika :

pivot = (x+y)/2

pivot = (0+8)/2 = 4

pivotnya berada pada indeks ke-4 yaitu = 4

pada data awal x = adalah nilai paling kiri dalam indeks array yaitu ( 0 ), x akan memindai

data dari sebelah kiri dan akan mencari data yang lebih besar / sama dengan pivot, jika x

menemukan data yang lebih kecil dari pivot maka x akan bergeser ke kanan (x+1).

pada data awal y = adalah nilai paling kanan dalam indeks array yaitu ( 8 ),y akan memindai

data dari sebelah kanan dan mencari data yang lebih kecil / sama dengan pivot, jika y

menemukan data yang lebih besar dari pivot maka y akan bergeser ke kiri (y-1).

Jika x dan y menemukan data yang sesuai dengan syarat diatas maka posisi dari data tersebut

akan ditukar .

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 berhenti pada indeks[0], (data y > pivot) maka y akan

berjalan kekiri (y-1).

6 2 9 5 4 1 7 3 8 x y

2 | R a p ( Q U I C K S O R T )

Page 3: Metode Quick Sort

Langkah 2: x tetap pada indeks[0], (data y < pivot) maka y berhenti pada indeks[7] dan syarat

terpenuhi maka data pada indeks [0] dan [7] ditukar, setelah posisi ditukar maka x bergeser ke

kanan (x+1) dan y bergeser ke kiri (y-1).

3 2 9 5 4 1 7 6 8 x y

Langkah 3: (data x < pivot) maka x bergeser ke kiri (x+1), (data y > pivot) maka y akan bergeser

ke kanan (y-1).

3 2 9 5 4 1 7 6 8 x y

Langkah 4: (data x > pivot) maka x berhenti pada indeks[2], (data y < pivot) maka y berhenti

pada indeks[5] dan syarat terpenuhi maka data pada indeks [2] dan [5] ditukar, setelah posisi

ditukar maka x bergeser ke kanan (x+1) dan y bergeser ke kiri (y-1).

3 2 1 5 4 9 7 6 8 x y

Langkah 5: (data x > pivot) maka x berhenti pada indeks [3], (data y = pivot) maka y berhenti

pada indeks[4] dan syarat terpenuhi maka data pada indeks [3] dan [4] ditukar, setelah posisi

ditukar maka x bergeser ke kanan (x+1) dan y bergeser ke kiri (y-1).

3 2 1 4 5 9 7 6 8 y x

karena x > y maka pembagian partisi telah selesai dan array menjadi 2 bagian, seperti di

bawah ini bagian kiri dari pivot akan berisi data yang lebih kecil dan sebelah kanan pivot akan

berisi data yang lebih besar.

Maka sorting akan diteruskan dengan masing-masing partisi, yaitu partisi kiri terlebih

dahulu dan kemudian partisi kanan.

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

3 | R a p ( Q U I C K S O R T )

Page 4: Metode Quick Sort

3 2 1 4 5 9 7 6 8

3 2 1 x y

Langkah 6: pivot pada partisi kiri adalah (0+2)/2=1 maka pivotnya berada pada indeks[1] = 2,

maka di cek (data x > pivot) maka x tetap pada indeks[0], (data y < pivot) dan syarat terpenuhi

maka data pada indeks [0] dan [2] ditukar, setelah posisi ditukar maka x bergeser ke kanan

(x+1=1) dan y bergeser ke kiri (y-1=1).

1 2 3

Maka nilai x=y dan sorting untuk partisi kiri selesai, maka akan dilanjutkan dengan

partisi kanan.

[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 pada partisi kiri adalah (4+8)/2=6 maka pivotnya berada pada indeks[6] = 7,

maka di cek (data x < pivot) maka x bergeser ke kanan (x+1), (data y > pivot) maka y bergeser

ke kiri (y-1).

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

5 9 7 6 8

x y

4 | R a p ( Q U I C K S O R T )

Page 5: Metode Quick Sort

Langkah 8: (data x > pivot) maka x berhenti pada indeks [5], (data y = pivot) maka y berhenti

pada indeks[7] dan syarat terpenuhi maka data pada indeks [5] dan [7] ditukar, setelah posisi

ditukar maka x bergeser ke kanan (x+1=6) dan y bergeser ke kiri (y-1=6).

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

5 6 7 9 8Maka x=y maka sorting pada partisi kanan selesai dan terbagi menjadi 2 bagian partisi :

kanan 1 kanan 2

5 6 9 8 x y

Langkah 9: pada partisi kanan 1 pivotnya adalah (4+5)/2=4,5 karena int tidak mengenal pecahan

maka dibulatkan menjadi 4 , pivot = [4] = 5 kemudian di cek (data x = pivot) maka x tetap, di

cek (data y > pivot) maka y mundur satu langkah menjadi y-1=5 sehingga nilai x=y sorting

selesai tanpa adanya perubahan

[7] [8]

9 8 x y

Langkah 10: pada partisi kanan 2 pivotnya adalah (7+8)/2=7,5 karena int tidak mengenal

pecahan maka dibulatkan menjadi 7 , pivot = [7] = 9, kemudian di cek (data x = pivot) maka x

tetap pada indeks[7], (data y < pivot) dan syarat terpenuhi maka data pada indeks [7] dan [8]

ditukar, setelah posisi ditukar maka x bergeser ke kanan (x+1=1) dan y bergeser ke kiri (y-1=1).

8 9 y x

karena x > y maka sorting selesai.

5 | R a p ( Q U I C K S O R T )

Page 6: Metode Quick Sort

Untuk lebih jelasnya perhatikan gambar berikut ini :

[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

1 2 3 4 5 6 7 8 9

Berikut Program untuk Quick Sort :

6 | R a p ( Q U I C K S O R T )

Page 7: Metode Quick Sort

#include <iostream>#include <conio.h>using namespace std;void quick_sort(int arr[], int left, int right) { int i = left, j = right;int tmp; 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(){int i,n,data[50];cout<<"Masukan banyak data: ";cin>>n;for(i=0;i<n;i++){cout<<"Masukan data ["<<i<<"] : ";cin>>data[i];}cout<<"Data sebelum diurutkan: "<<endl;for(i=0;i<n;i++){cout<<data[i]<<" ";}cout<<"\n";quick_sort(data,0,n-1);//hasil pengurutancout<<"hasil pengurutan:\n";{int i;for (i=0;i<n;i++)cout<<data[i]<<" ";cout<<"\n";}getch();}

7 | R a p ( Q U I C K S O R T )