• Tidak ada hasil yang ditemukan

MAKALAH ALGORITMA (QUICK SORT)

N/A
N/A
Protected

Academic year: 2021

Membagikan "MAKALAH ALGORITMA (QUICK SORT)"

Copied!
17
0
0

Teks penuh

MAKALAH ALGORITMA (QUICK SORT)

Mata

Mata Kuliah Kuliah : : Algoritma Algoritma & & Pemrograman Pemrograman 2C2C

Dosen

Dosen : : Noorvika Noorvika HizvianiHizviani

Disusun Oleh :

Disusun Oleh :

Kelompok 2

Kelompok 2

1.

1. Ahadi Ahadi Rahmanto Rahmanto (20116341)(20116341)

2.

2. Dicki Dicki Armanda Armanda (21116990)(21116990)

3.

3. Gilang Gilang Sukma Sukma Wijaya Wijaya (23116046)(23116046)

4.

4. Rafika Rafika Ayu Ayu Melani Melani (25116950)(25116950)

5.

5. Zaqiyyah Zaqiyyah Noor Noor S.I S.I (27116919)(27116919)

1KB05

1KB05

FAKULTAS ILMU KOMPUTER DAN TEKHNOLOGI INFORMASI UNIVERSITAS GUNADARMA 

2017

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 Noorvika Hizviani, selaku Dosen mata kuliah Algoritma dan Pemrograman 2C Universitas Gunadarma yang telah memberikan tugas ini kepada kami.

Kami 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. Kami 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.

Depok, 10 Juli 2017

Daftar Isi

Kata Pengantar ... ... 2 Daftar Isi ... ... 3 Bab I Pendahuluan 1.1 Latar Belakang ... ... 4 1.2 Rumusan Masalah ... ... 4 1.3 Tujuan Penulisan ... ... 5 Bab II Pembahasan 2.1 Definisi Quick Sort ... ... 6

2.2 Algoritma Quick Sort ... ... 6

2.3 Metode dalam Algoritma Quick Sort ... ... 7

2.4 Implementasi Quick Sort pada C++ ... ... 11

2.5 Implementasi Quick Sort pada Visual Basic ... ... 13

2.6 Kelebihan Algoritma Quick Sort ... ... 14

2.7 Kelemahan Algoritma Quick Sort ... ... 14

Bab III Penutup 3.1 Kesimpulan ... ... 16

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. Bagaimana implementasi Algoritma Quick Sort menggunakan bahasa pemrograman Visual Basic?

6. Apa kekurangan dari Algoritma Quick Sort?

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 bagaimana implementasi Algoritma Quick Sort menggunakan  bahasa pemprograman Visual Basic.

5. Untuk mengetahui kelebihan dari Algoritma Quick Sort. 6. Untuk mengetahui kekurangan dari Algoritma Quick Sort.

BAB II PEMBAHASAN

2.1 Definisi Quick Sort

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.

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.

Quick Sort merupakan suatu algoritma pengurutan data yang menggunakan teknik  pemecahan data menjadi partisi-partisi, sehingga metode ini disebut juga dengan nama  partition exchange sort. Untuk memulai irterasi pengurutan, pertama-tama sebuah elemen dipilih dari data, kemudian elemen-elemen data akan diurutkan diatur sedemikian rupa

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. Pada kasus terburuknya, algoritma ini membuat perbandingan O(n2), walaupun 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.

2.2 Algoritma Quick Sort

Quicksort merupakan Algortima 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.

Algoritma Quick Sort ini terdapat tiga bagian yaitu low, high, dan pivot. Low adalah  batas bawah atau index awal sebuah array, sedangkan high adalah batas akhir atau index 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.

Adapun algoritma quick sort adalah seperti dibawah ini : QuickSort(A, low, high)

if low < high

 p = Partition (A, low, high) QuickSort(A, low, p-1) QuickSort(A, p+1, high)

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.

2.3 Metode dalam Algoritma Quick Sort

Adapun metode Partition adalah sebagai berikut : Partition(A, low, high)

 pivot = A[high] i = low

for j = low to high-1 if A[ j ] ≤  pivot i = i+1

exchange A[ i ] with A[ j ] exchange A[ i ] with A[ high ] 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

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

Pada perulangan ketiga, nilai j = 2. Nilai A[ 2 ] = 19. Karena 19 kurang dari 33 (pivot) maka posisi i  bergeser pada index ke-1, dan dilakukan pertukaran antara A[0] dengan A[2].

19 99 39 9 12 10 33

i pivot

Pada perulangan keempat, nilai j = 3. Nilai A[ 3 ] = 9. Karena 9 kurang dari 33 (pivot) maka posisi i  bergeser pada index ke-2, dan dilakukan pertukaran antara A[1] dengan A[3].

19 9 39 99 12 10 33

i pivot

Pada perulangan kelima, nilai j = 4. Nilai A[ 4 ] = 12. Karena 12 kurang dari 33 (pivot) maka posisi i  bergeser pada index ke-3, dan dilakukan pertukaran antara A[2] dengan A[4].

19 9 12 99 39 10 33

Pada perulangan keenam, nilai j = 5. Nilai A[ 5 ] = 10. Karena 10 kurang dari 33 (pivot) maka posisi i  bergeser pada index ke-4, dan dilakukan pertukaran antara A[3] dengan A[5].

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 s ebagai berikut :

Kiri Kanan

19 9 12 10 33 99 39

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 :

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

2.4 Implementasi Quick Sort pada C++

Program C++ merupakan salah satu program yang bisa digunakan dalam  penggunaan Quick Sort yang mudah untuk digunakan. Salah satu contoh dari Quick Sort

dalam C++ adalah :

#include <iostream> #define n 20

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];

}

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) {

arr[i] = arr[j]; arr[j] = tmp; i++;  j--; } }; if (left < j) quickSort(arr, left, j); if (i < right) quickSort(arr, i, right); }

2.5 Implementasi Quick Sort pada Visual Basic

Penerapan algoritma quicksort menggunakan antar muka bahasa pemograman  berbasis visual yaitu visual basic 6.0 dengan kumpulan perintah seperti dibawah ini:

Public Sub Quicksort(list() As Integer, ByVal min As Long, ByVal max As Long) Dim med_value As Long

Dim hi As Long Dim lo As Long

Dim i As Long If min >= max Then Exit Sub

i = Int((max - min + 1) * Rnd +min) med_value = list(i) list(i) = list(min)

lo = min hi = max Do

Do While list(hi) >= med_value hi = hi –  1

If hi <= lo Then Exit Do Loop

list(lo) = med_value Exit Do

End If

list(lo) = list(hi) lo = lo + 1

Do While list(lo) < med_value lo = lo + 1 If lo >= hi Then Exit Do Loop If lo >= hi Then lo = hi list(hi) = med_value Exit Do End If list(hi) = list(lo) Loop

Quicksort list(), min, lo –  1 Quicksort list(), lo + 1, max End Sub

2.6 Kelebihan Algoritma Quick Sort

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 an gka dan karakter).

Dibalik kelebihan Algoritma Quick Sort akan ada kelemahan pula yang ada didalamnya seperti :

1. Sedikit kesalahan dalam penulisan program membuatnya bekerja tidak beraturan (hasilnya tidak benar atau tidak pernah selesai).

2. emiliki ketergantungan terhadap data yang dimasukkan, yang dalam kasus terburuk memiliki kompleksitas O(n2).

3. Secara umum bersifat tidak stable, yaitu mengubah urutan input dalam hasil akhirnya (dalam hal inputnya bernilai sama).

4. Pada penerapan secara rekursif (memanggil dirinya sendiri) bila terjadi kasus terburuk dapat menghabiskan stack dan memacetkan program.

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.

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/

 

Referensi

Dokumen terkait

Pada penelitian ini akan di analisa perbandingan algortima pengurutan data, yaitu: bubble sort, merge sort, dan quick sort untuk mendapatkan waktu proses yang

Klasifikasi algoritma pengurutan berdasarkan proses pengurutan terdiri dari: exchange sort, selection sort, insertion sort, merge sort, dan non comparison

permasalahan yang berkaitan dengan proses pengurutan, yaitu algoritma Strand Sort,. Sieve Sort dan

Strand Sort adalah algoritma pengurutan yang mencari elemen yang tepat untuk.. diletakkan di posisi yang telah diketahui, dan meletakkannya di posisi

Performa algoritma dapat diketahui sebagai algoritma yang handal dalam melakukan pengurutan data dari besarnya asimptotik yang diperlukan bila diberikan n buah

Selection sort merupakan salah satu algoritma pengurutan data dengan mencari elemen yang tepat untuk diletakkan di posisi yang telah diketahui, dan meletakkan di

Pada penelitian ini akan di analisa perbandingan algortima pengurutan data, yaitu: bubble sort, merge sort, dan quick sort untuk mendapatkan waktu proses yang baik dalam

Pengurutan data dengan algoritma bubble sort sangat efisien jika jumlah datanya sedikit, sedangkan jika jumlah datanya besar, pengujian data pada algoritma bubble sort akan memakan