(QUICK SORT)
Disusun Oleh :
Nama : Tasmad
NPM : 43A87006180355
Kelas : SI/TI/03/K/P
1
KATA PENGANTAR
Puji syukur kami panjatkan kepada Tuhan Yang Maha Esa karena dengan rahmat, karunia,
taufik serta hidayah-Nya kami dapat menyelesaikan makalah tentang ‘Algoritma Quick Sort’.
Dan juga kami berterima kasih kepada Ibu Hariyanto, M.Kom, selaku Dosen mata kuliah
Algoritma dan Kompleksitas STMIK Bani Saleh yang telah memberikan tugas ini kepada
saya.
Saya berharap makalah ini dapat berguna bagi para pembaca guna menambah wawasan
dan pengetahuan mengenai Algoritma Quick Sort beserta implementasinya dalam kehidupan.
Semoga makalah sederhana ini dapat membantu para pembaca sebagai pengetahuan dan
penambahan wawasan. Saya mohon maaf bila sebelumnya ada kata yang kurang berkenan
dan kesalahan kata yang tidak kami sengaja. Kami mengharapakan kritik, saran dan masukan
dari pembaca agar kedepannya lebih baik lagi.
Tasmad
2
3
Daftar Isi
4
BAB I
PENDAHULUAN
1.1 Latar Belakang
Algoritma adalah prosedur langkah-langkah yang berurutan untuk memperoleh hasil
yang diinginkan. Sebelum sebuah algoritma dijalankan, biasanya ada suatu kondisi awal
(initial state) yang harus dipenuhi. Kemudian, langkah-langkah ini diproses hingga mencapai
suatu kondisi akhir (final state).
terdapat berbagai algoritma yang dapat digunakan, Untuk menyelesaikan suatu
masalah sesuai dengan salah satu pepatah popular, “Ada banyak jalan menuju Roma.” Akan
tetapi, algoritma manakah yang harus dipilih agar masalah itu dapat diselesaikan dengan
efektif? Tentu harus ada pilihan yang bisa dibandingkan. Setiap algoritma memiliki dua buah
ciri khas pembanding, seperti : jumalh proses yang dilakukan dan jumlah memori yang
digunakan untuk melakukan proses. Jumlah proses yang dikenal sebagai kompleksitas waktu
yang disimbolkan dengan T(n), sedangkan jumlah memori ini dikenal sebagai
kompleksitas ruang yang disimbolkan dengan S(n). Berdasarkan arsitektur yang berbeda-
beda dan compiler yang berbeda-beda kompleksitas waktu di ukur berdasarkan jumlah proses
khas suatu algoritma, bukan berdasarkan runtime aplikasinya.
Pengurutan data (sort) adalah algoritma yang meletakkan elemen pada sebuah list
atau tabel dengan urutan tertentu. Algoritma pengurutan data saat ini telah demikian
banyaknya, mulai dari yang sederhana sampai yang kompleks. Sorting didefinisikan sebagai
pengurutan sejumlah data berdasarkan nilai kunci tertentu. Pengurutan dapat dilakukan dari
nilai terkecil ke nilai terbesar (ascending) atau sebaliknya (descending).Algoritma Sorting
termasuk salah satu contoh yang kaya akan solusi.
1.2 Rumusan Masalah
Adapun rumusan masalah yang akan dibahas pada makalah ini adalah:
1. Apa pengertian dari Quick Sort ?
2. Bagaimanakah Algoritma yang bisa diimplementasikan dalam Quick Sort dan
bagaimana metodenya ?
3. Bagaimana implementasi Algoritma Quick Sort menggunakan bahasa pemprograman
C++?
4. Apa kelebihan dari Algoritma Quick Sort?
5. Apa kekurangan dari Algoritma Quick Sort?
5
1.3.Tujuan Penulisan
Sedangkan tujuan penulisan yang dapat diambil dari pembahasan rumusan masalah
diatas adalah :
1. Untuk mengetahui pengertian dari Quick Sort.
2. Untuk mengetahui bagaimanakah Algoritma yang bisa diimplementasikan dalam
Quick Sort dan metodenya.
3. Untuk mengetahui bagaimana implementasi Algoritma Quick Sort menggunakan
bahasa pemprograman C++.
4. Untuk mengetahui kelebihan dari Algoritma Quick Sort.
5. Untuk mengetahui kekurangan dari Algoritma Quick Sort.
6
BAB II
PEMBAHASAN
7
terakhir array tersebut, dan pivot sebagai index acuan. Pada array normal yang belum
dipecah, nilai lownya adalah 0 (nol) karena array dimulai dari index ke-0. Sedangkan
untuk high, nilainya array.length-1.
Langkah-Langkah pengerjaannya ialah:
1. Ambil sebuah elemen, yang disebut dengan pivot, pada sebuah daftar.
2. 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.
3. Sub list kemudian disortir secara recursif dari elemen yang lebih kecil dan sub list dari
elemen yang lebih besar.
Pada algoritma quick sort diatas terdapat dua metod, yang pertama metodQuick
Sort itu sendiri yang bersifat rekursif dan metod Partition yang digunakan untuk
mengetahui penanda sehingga data tersebut terpecah menjadi dua. Algoritma dijalankan
selama nilai low kurang dari high, apabila nilai low sama dengan nilai high, artinya jumlah
elemen array hanya ada satu. Variabel p digunakan untuk menampung nilai pivot yang
digunakan untuk acuan pemecahan array. Sebelum dipecah menjadi dua, array tersebut
dipartisi dulu untuk menentukan index pivot. Setelah diketahui index keberapa yang
menjadi pivot maka array terpecah menjadi dua. Pada array pertama bagian kiri, nilai
lownya tetap nol dan nilai highnya pivot-1. Sedangkan pada array sisi kanan, nilai lownya
adalah pivot+1 dan highnya array.length-1.
8
9
2.3 Metode dalam Algoritma Quick Sort
pivot = A[high]
i = low
if A[ j ] ≤ pivot
i = i+1
exchange A[ i ] with A[ j ]
return i
Sebagai contoh, terdapat sebuah array A dengan nilai acak {39, 99, 19, 9, 12, 10,
33}. Maka nilai low = 0, high = 6 (nilai A.length-1). Karena nilai low kurang dari high,
yang artinya jumlah elemen array A lebih dari satu, maka dilakukan partisi. Pada metod
partisi, nilai pivot adalah 33 dan i berada pada index ke-0 yaitu nilai 39.
39 99 19 9 12 10 33
i pivot
Selama perulangan dari 0 sampai 5, artinya selama dari index ke-0 hingga ke-5 akan
melakukan perulangan. Pada perulangan pertama, nilai j = 0. Nilai A[ 0 ] = 39. Karena
39 tidak kurang dari 33 (pivot) maka posisi i tidak bergeser, tetap pada index ke-0 dan
tidak dilakukan pertukaran antara A[0] dengan A[0].
39 99 19 9 12 10 33
i pivot
10
Pada perulangan kedua, nilai j = 1. Nilai A[ 1 ] = 99. Karena 99 tidak kurang dari 33
(pivot) maka posisi i tidak bergeser, tetap pada index ke-1 dan tidak dilakukan
pertukaran A[0] dengan A[1].
39 99 19 9 12 10 33
i pivot
19 99 39 9 12 10 33
i pivot
19 9 39 99 12 10 33
i pivot
19 9 12 99 39 10 33
i pivot
11
19 9 12 10 39 99 33
i pivot
Perulangan for berhenti karena kondisinya sudah tidak sesuai. Kemudian nilai A[i] =
39 ditukar dengan nilai A[high] = 33 dengan posisi i tetap.
19 9 12 10 33 99 39
i pivot
Dari sini kembali lagi pada metod QuickSort dengan nilai p sama dengan nilai
kembalian Partition, sehingga nilai p adalah 4. Selanjutnya memecah array menjadi dua
bagian dan meamnggil metode quicksort dan partition lagi. Pada array sebelah kiri,
nilai low = 0 dan high = 3 sedangkan pada array sisi kanan nilai low = 5 dan high = 6.
Kiri Kanan
19 9 12 10 33 99 39
i pivot i pivot
Posisi p (nilai 33) sudah ideal namun pada sisi kiri dan kanan masih belum sesuai,
maka perlu di lakukan quick sort lagi. Proses dari quick sort sebagai berikut :
Kiri Kanan
19 9 12 10 33 99 39
i pivot i pivot
Pada sisi kanan yang hanya terdapat dua elemen array, nilai i lebih besar dari nilai
pivot maka posisi i tetap dan tidak ditukar pada perulangan for. Namun ditukar antar
A[i] dengan A[high] karena jumlah panjang arraynya hanya dua.
Kiri Kanan
9 19 12 10 33 39 99
i pivot
Namun pada sisi kiri masih perlu di seleksi menggunakan perulangan for seperti
langkah sebelumnya. Karena 12 lebih besar dari pivot maka perulanagn berhenti dan
nilai i ditukar dengan nilai high. Adapun gambarannya sebagai berikut :
12
Kiri Kanan
9 10 12 19 33 39 99
i pivot
Dari array kiri diatas array seharusnya dipecah lagi sesuai dengan posisi i. Tetapi
karena di sebelah kiri indeks i hanya satu elemen maka tidak perlu dilakukan
pemanggilan quicksort. Sedangkan pada sisi kanan hanya terdapat dua elemen yang
sudah sesuai. Maka tampilan outputnya adalah :
9 10 12 19 33 39 99
#include <iostream>
#define n 20
using namespace std;
int Ar[n];
void quickSort(int arr[], int left, int right);
int main()
{
int jumlahBil=5;
cout<<"Masukkan jumlah bilangan dalam arry [Maksimal 20]"<<endl;
cin>>jumlahBil;
int Ar[jumlahBil];
for(int i=0; i<jumlahBil;i++)
{
cout<<"Bilangan ke-"<< i+1 << endl;
cin>>Ar[i];
}
13
quickSort(Ar,0,jumlahBil-1); );
cout<<"Data yang telah diurutkan"<<endl;
for(int i=0; i<jumlahBil;i++)
{
cout<<Ar[i]<<"\n";
}
}
void quickSort(int arr[], int left, int right)
{int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
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--;
}
};
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
14
Beberapa hal yang membuat Algoritma Quick Sort menjadi lebih unggul, yaitu :
1. Secara umum memiliki kompleksitas O(n log n).
2. Algoritmanya sederhana dan mudah diterapkan pada berbagai bahasa pemrograman
dan arsitektur mesin secara efisien.
3. Dalam prakteknya adalah yang tercepat dari berbagai algoritma pengurutan dengan
perbandingan, seperti merge sort dan heap sort.
4. Melakukan proses langsung pada input (in-place) dengan sedikit tambahan memori.
5. Bekerja dengan baik pada berbagai jenis input data (seperti angka dan karakter).
BAB III
PENUTUP
3.1 Kesimpulan
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.
15
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.
Quicksort dalam 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.
Algoritma Quick Sort dapat diimplementasikan terhadap program-program seperti
C++,Visual Basic, dll. Serta didalamnya terdapat kelebihan yang membuat Quick Sort
unggul maupun kelemahan yang bisa membuat kesalahan jika penulisannya tidak
diperhatikan.
Daftar Pustaka
https://7seasons.wordpress.com/tag/quick-sort-dengan-c/
https://rizarulham.wordpress.com/2009/10/07/algoritma-quick-sort/
https://informasi-anakutm.blogspot.co.id/2016/05/makalah-rancangan-analisa-
algoritma.html?m=1
https://id.wikipedia.org/wiki/Berkas:Quicksort-diagram.svg
https://id.wikipedia.org/wiki/Quicksort
https://ilmubholang.wordpress.com/2013/02/07/makalah-struktur-data-quick-sort/
16
17