Professional Documents
Culture Documents
Pivot
Dalamalgoritma quick sort, pemilihan pivot adalahhal yang menentukanapakahalgoritma
quick sort tersebutakanmemberikanperformaterbaikatauterburuk.
Berikutbeberapacarapemilihanpivot :
1|Rap(QUICK SORT)
Contoh :
6 2 9 5 4 1 7 3 8
pivot = (x+y)/2
pivot = (0+8)/2 = 4
Indeks :
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
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
3|Rap(QUICK SORT)
Maka sorting akanditeruskandenganmasing-masingpartisi,
yaitupartisikiriterlebihdahuludankemudianpartisikanan.
3 2 1 4 5 9 7 6 8
3 2 1
x y
1 2 3
3 2 1 4 5 9 7 6 8
5 9 7 6 8
x y
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).
5 6 7 9 8
Maka x=y maka sorting padapartisikananselesaidanterbagimenjadi 2 bagianpartisi :
kanan 1 kanan 2
5 6 9 8
x y
[7] [8]
9 8
x y
8 9
y x
5|Rap(QUICK SORT)
karena x > y maka sorting selesai.
Untuklebihjelasnyaperhatikangambarberikutini :
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
#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)