MAKALAH ALGORITMA(QUICK SORT)
Mata Kuliah : Analisis Algoritma
Dosen : Ahmad Nur Ihsan Purwanto, S.T., M.T.
Nama Kelompok
Ferryawan Ardiansyah - 2110130004 Hilmanastiar Ramadhan – 2110130005
KATA PENGANTAR
Dengan rendah hati, kami mempersembahkan makalah ini tentang 'Algoritma Quick Sort'. Algoritma ini merupakan salah satu teknik pengurutan yang memiliki peran penting dalam ilmu komputer dan pemrograman. Dalam makalah ini, kami akan mencoba menjelaskan secara komprehensif prinsip kerja, implementasi, dan relevansi Algoritma Quick Sort dalam dunia teknologi informasi.
Kami ingin mengucapkan terima kasih kepada semua pihak yang telah memberikan dukungan dan inspirasi dalam penulisan makalah ini. Terutama kepada Bapak/Ibu Dosen yang telah memberikan arahan dan bimbingan dalam mata kuliah ini. Tanpa bimbingan mereka, makalah ini tidak akan pernah selesai.
Kami juga berharap makalah ini dapat menjadi sumber pengetahuan yang berguna bagi pembaca yang ingin memahami lebih dalam mengenai Algoritma Quick Sort. Kami menyadari bahwa setiap karya memiliki potensi untuk perbaikan, dan kami sangat menghargai setiap kritik dan saran yang dapat memperkaya isi makalah ini.
Akhir kata, semoga makalah ini dapat menjadi panduan yang bermanfaat dan berguna bagi pembaca dalam memahami konsep Algoritma Quick Sort. Kami berharap makalah ini dapat memberikan wawasan yang berarti dalam dunia teknologi dan komputasi.
Terima kasih.
[Ferryawan Ardiansyah]
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
Daftar Pustaka ... 17
BAB I PENDAHULUAN 1.1 Latar Belakang
Algoritma adalah sekumpulan prosedur langkah-langkah berurutan yang digunakan untuk mencapai hasil yang diinginkan. Sebelum menjalankan algoritma, kondisi awal yang biasanya disebut sebagai "initial state" harus terpenuhi. Kemudian, langkah- langkah ini dieksekusi hingga mencapai kondisi akhir atau "final state."
Dalam pemilihan algoritma untuk menyelesaikan suatu masalah, seringkali terdapat berbagai opsi yang dapat digunakan. Seperti yang diungkapkan dalam pepatah yang populer, "Ada banyak jalan menuju Roma." Namun, perlu dipilih algoritma yang efektif untuk menyelesaikan masalah tersebut. Setiap algoritma memiliki dua karakteristik kunci yang dapat dibandingkan, yaitu jumlah proses yang dilakukan (kompleksitas waktu, disimbolkan sebagai T(n)) dan jumlah memori yang digunakan (kompleksitas ruang, disimbolkan sebagai S(n)). Kompleksitas waktu diukur berdasarkan jumlah operasi kunci yang dilakukan oleh algoritma, sedangkan kompleksitas ruang mengacu pada jumlah memori yang diperlukan.
Salah satu contoh penggunaan algoritma yang relevan adalah dalam pengurutan data (sorting). Pengurutan data adalah proses mengatur elemen-elemen dalam sebuah daftar atau tabel dalam urutan tertentu. Pengurutan dapat dilakukan dari nilai terkecil ke nilai terbesar (ascending) atau sebaliknya (descending). Algoritma sorting memiliki beragam solusi, mulai dari yang sederhana hingga yang kompleks.
1.2 Rumusan Masalah
Rumusan masalah yang akan dibahas dalam makalah ini adalah:
1. Pengertian dari Quick Sort.
2. Algoritma yang dapat diimplementasikan dalam Quick Sort dan metodenya.
3. Implementasi Algoritma Quick Sort menggunakan bahasa pemrograman C++.
4. Implementasi Algoritma Quick Sort menggunakan bahasa pemrograman Visual Basic.
5. Kelebihan dari Algoritma Quick Sort 6. Kekurangan dari Algoritma Quick Sort.
1.3 Tujuan Penulisan
Tujuan penulisan yang dapat diambil dari pembahasan rumusan masalah di atas adalah:
1. Memahami pengertian dari Quick Sort.
2. Memahami bagaimana Algoritma yang dapat diimplementasikan dalam Quick Sort dan metodenya.
3. Mempelajari implementasi Algoritma Quick Sort menggunakan bahasa pemrograman C++.
4. Mempelajari implementasi Algoritma Quick Sort menggunakan bahasa pemrograman Visual Basic.
5. Mengidentifikasi kelebihan dari Algoritma Quick Sort.
6. Mengidentifikasi 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 dipublikasikan dalam artikel "Computer Journal 5" pada bulan April 1962. Quick Sort adalah algoritma pengurutan yang menggunakan metode divide-and-conquer. Nama
"Quick Sort" merujuk pada kemampuannya mengurutkan data dengan sangat cepat.
Meskipun kompleks dan memproses secara rekursif, Quick Sort tetap menjadi salah satu algoritma pengurutan tercepat untuk kasus umum.
Quick Sort merupakan algoritma pengurutan data yang membagi data menjadi partisi- partisi, sehingga juga dikenal dengan sebutan partition exchange sort. Proses
pengurutan dimulai dengan pemilihan satu elemen dari data, yang disebut "pivot,"
kemudian elemen-elemen data diatur sedemikian rupa sehingga elemen-elemen dengan nilai lebih kecil dari pivot berada sebelum pivot, dan elemen-elemen dengan nilai lebih besar dari pivot berada setelahnya. Proses ini disebut "partition." Quick Sort secara rata-rata memiliki kompleksitas waktu O(n log n) untuk mengurutkan n item.
Namun, dalam kasus terburuknya, algoritma ini dapat memiliki kompleksitas waktu O(n^2), meskipun kejadian seperti ini sangat jarang terjadi. Quick Sort seringkali lebih efisien dalam praktiknya dibandingkan dengan algoritma pengurutan lainnya yang memiliki kompleksitas waktu O(n log n). Selain itu, penggunaan cache CPU yang optimal membuat Quick Sort bekerja lebih efisien dengan tambahan ruang O(log n).
2.2 Algoritma Quick Sort
Quick Sort adalah algoritma pembagi (divide-and-conquer). Pertama, Quick Sort membagi data besar menjadi dua sub-list yang lebih kecil: elemen-elemen kecil dan elemen-elemen besar. Kemudian, Quick Sort mengurutkan kedua sub-list tersebut secara rekursif.
Pada algoritma Quick Sort, terdapat tiga bagian utama: "low," "high," dan "pivot." "Low"
adalah batas awal atau indeks pertama dari array, "high" adalah batas akhir atau indeks terakhir dari array, sedangkan "pivot" adalah indeks acuan. Dalam array yang belum dipartisi, nilai "low" biasanya adalah 0 karena array dimulai dari indeks ke-0. "High"
memiliki nilai array.length-1.
Langkah-langkah pengerjaannya adalah sebagai berikut:
1. Ambil sebuah elemen yang disebut "pivot" dari daftar.
2. Urutkan daftar sehingga elemen dengan nilai lebih kecil dari pivot berada sebelum pivot, sementara elemen dengan nilai lebih besar dari pivot berada setelah pivot (nilai yang sama dapat berada di sekitar pivot).
3. Setelah pemisahan selesai, pivot berada pada posisi akhirnya. Proses ini disebut
"Partition."
4. Sub-list kemudian diurutkan secara rekursif, satu sub-list berisi elemen-elemen yang lebih kecil dari pivot, sementara sub-list lain berisi elemen-elemen yang lebih besar.
Algoritma Quick Sort terdiri dari dua metode utama: "QuickSort" yang bersifat rekursif dan "Partition" yang digunakan untuk membagi data menjadi dua sub-list. Algoritma dijalankan selama nilai "low" kurang dari "high." Jika "low" sama dengan "high," artinya hanya ada satu elemen dalam array. Variabel "pivot" digunakan untuk menandai posisi elemen yang menjadi pivot. Setelah indeks pivot diketahui, array dibagi menjadi dua bagian. Bagian kiri memiliki "low" yang tetap 0 dan "high" sebelum pivot - 1, sementara bagian kanan memiliki "low" setelah pivot + 1 dan "high" sebesar array.length-1.
2.3 Metode dalam Algoritma Quick Sort
Metode dalam Algoritma Quick Sort melibatkan proses partisi yang membagi array menjadi dua bagian, dengan elemen-elemen kecil dari pivot berada sebelum pivot, dan elemen-elemen besar setelah pivot. Berikut adalah metode Partition:
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
Contoh penggunaan metode Partition: Misalkan terdapat sebuah array A dengan nilai acak {39, 99, 19, 9, 12, 10, 33}. Maka nilai "low" = 0 dan "high" = 6 (nilai A.length-1).
Karena "low" kurang dari "high," yang berarti jumlah elemen array A lebih dari satu, maka dilakukan partisi.
Pada proses partisi, nilai pivot adalah 33, dan nilai "i" berada pada indeks 0, yang merupakan nilai elemen pertama dalam array.
Selama perulangan dari 0 hingga 5, yang berarti dari indeks 0 hingga 5, akan ada perulangan sebagai berikut:
• Pada perulangan pertama, nilai "j" = 0. Nilai A[0] = 39, dan karena 39 tidak kurang dari 33 (pivot), maka posisi "i" tidak bergeser, dan tidak ada pertukaran antara A[0] dan A[0].
• Pada perulangan kedua, nilai "j" = 1. Nilai A[1] = 99, dan karena 99 tidak kurang dari 33 (pivot), maka posisi "i" tetap pada indeks 1, dan tidak ada pertukaran antara A[0] dan A[1].
• Perulangan ketiga, nilai "j" = 2. Nilai A[2] = 19, dan karena 19 kurang dari 33 (pivot), posisi "i" bergeser ke indeks 1, dan dilakukan pertukaran antara A[0] dan A[2].
Proses berlanjut seperti ini, dan partisi berhenti ketika kondisi perulangan tidak lagi sesuai. Setelah partisi selesai, pivot (33) berada pada posisi akhirnya.
Kemudian, nilai pivot ditukar dengan nilai A[i] (nilai A[4]). Nilai "i" adalah 4, sehingga nilai pivot kini berada pada posisi yang sesuai.
Hasil partisi adalah array yang terbagi menjadi dua sub-array, dan proses Quick Sort akan berlanjut pada kedua sub-array ini.
Semoga penjelasan ini membantu memahami metode Partition dalam Algoritma Quick Sort.
2.4 Implementasi Quick Sort pada C++
#include <iostream>
// Fungsi untuk menukar dua elemen dalam array void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
// Fungsi untuk mempartisi array dan mengembalikan indeks pivot int partition(int arr[], int low, int high) {
int pivot = arr[high]; // Pivot diambil dari elemen terakhir int i = (low - 1); // Indeks elemen terkecil
for (int j = low; j <= high - 1; j++) {
// Jika elemen saat ini kurang dari atau sama dengan pivot if (arr[j] <= pivot) {
i++; // Tingkatkan indeks elemen terkecil swap(arr[i], arr[j]);
} }
swap(arr[i + 1], arr[high]);
return (i + 1);
}
// Fungsi utama untuk mengurutkan array menggunakan Quick Sort void quickSort(int arr[], int low, int high) {
if (low < high) {
// Dapatkan indeks pivot
int pi = partition(arr, low, high);
// Urutkan elemen di sekitar pivot quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
} }
int main() {
int arr[] = {12, 11, 13, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
std::cout << "Array sebelum diurutkan: ";
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
quickSort(arr, 0, n - 1);
std::cout << "\nArray setelah diurutkan: ";
for (int i = 0; i < n; i++) { std::cout << arr[i] << " ";
}
return 0;
}
Implementasi di atas mendefinisikan fungsi swap untuk menukar dua elemen dalam array, fungsi partition untuk mempartisi array, dan fungsi quickSort sebagai fungsi utama untuk mengurutkan array menggunakan algoritma Quick Sort. Program utama menginisialisasi array, mengurutkannya menggunakan quickSort, dan mencetak array sebelum dan setelah pengurutan.
2.5 Implementasi Quick Sort pada Visual Basic Module QuickSortModule
' Fungsi untuk menukar dua elemen dalam array
Sub Swap(ByRef arr() As Integer, ByVal index1 As Integer, ByVal index2 As Integer) Dim temp As Integer
temp = arr(index1) arr(index1) = arr(index2) arr(index2) = temp End Sub
' Fungsi untuk mempartisi array dan mengembalikan indeks pivot
Function Partition(ByRef arr() As Integer, ByVal low As Integer, ByVal high As Integer) As Integer
Dim pivot As Integer Dim i As Integer Dim j As Integer
pivot = arr(high) i = (low - 1)
For j = low To high - 1 If arr(j) <= pivot Then i = i + 1
Swap(arr, i, j) End If
Next
Swap(arr, i + 1, high) Return (i + 1)
End Function
' Sub utama untuk mengurutkan array menggunakan Quick Sort
Sub QuickSort(ByRef arr() As Integer, ByVal low As Integer, ByVal high As Integer) If low < high Then
Dim pi As Integer
pi = Partition(arr, low, high)
QuickSort(arr, low, pi - 1) QuickSort(arr, pi + 1, high) End If
End Sub
Sub Main()
Dim arr() As Integer = {12, 11, 13, 5, 6, 7}
Dim n As Integer = arr.Length
Console.Write("Array sebelum diurutkan: ") For i As Integer = 0 To n - 1
Console.Write(arr(i) & " ") Next
QuickSort(arr, 0, n - 1)
Console.WriteLine()
Console.Write("Array setelah diurutkan: ") For i As Integer = 0 To n - 1
Console.Write(arr(i) & " ") Next
End Sub
End Module
Implementasi di atas adalah dalam bahasa Visual Basic. Fungsi Swap digunakan untuk menukar dua elemen dalam array, fungsi Partition mempartisi array, dan sub QuickSort
adalah sub utama untuk mengurutkan array menggunakan algoritma Quick Sort.
Program utama menginisialisasi array, mengurutkannya menggunakan QuickSort, dan mencetak array sebelum dan setelah pengurutan.
2.6 Kelebihan Algoritma Quick Sort
Beberapa kelebihan yang membuat Algoritma Quick Sort menjadi unggul, yaitu:
1. Kompleksitas Rata-rata O(n log n): Algoritma Quick Sort secara umum memiliki kompleksitas waktu rata-rata O(n log n), yang membuatnya efisien dalam mengurutkan data.
2. Sederhana dan Mudah Diterapkan: Algoritma Quick Sort relatif sederhana dan mudah diterapkan dalam berbagai bahasa pemrograman dan arsitektur mesin.
Implementasinya dapat dilakukan dengan mudah.
3. Kecepatan dalam Praktek: Quick Sort seringkali menjadi salah satu algoritma pengurutan dengan perbandingan tercepat dalam praktek, jika dibandingkan dengan algoritma lain seperti Merge Sort dan Heap Sort.
4. In-Place Sorting: Algoritma Quick Sort dapat bekerja secara in-place dengan sedikit penggunaan memori tambahan. Ini berarti algoritma ini tidak memerlukan alokasi memori ekstra yang signifikan.
5. Kemampuan Menangani Berbagai Jenis Data: Algoritma Quick Sort dapat bekerja dengan baik pada berbagai jenis data, termasuk data numerik dan karakter. Ini membuatnya serbaguna dalam berbagai konteks.
Kelebihan-kelebihan ini menjadikan Algoritma Quick Sort pilihan yang kuat dalam mengurutkan data dalam berbagai aplikasi.
2.7 Kelemahan Algoritma Quick Sort
Dibalik kelebihan Algoritma Quick Sort, terdapat juga beberapa kelemahan:
1. Sensitif terhadap Input Terburuk: Algoritma Quick Sort dapat menjadi sangat lambat (kompleksitas waktu O(n^2)) dalam kasus terburuk ketika array yang akan diurutkan sudah dalam urutan yang hampir terurut. Ini terjadi ketika pivot selalu merupakan elemen terkecil atau terbesar, mengakibatkan pembagian data yang tidak seimbang.
2. Tidak Stabil: Quick Sort secara umum bersifat tidak stabil, yang berarti algoritma ini dapat mengubah urutan relatif elemen-elemen yang memiliki nilai yang sama.
Jadi, jika Anda ingin menjaga urutan relatif elemen dengan nilai yang sama, Quick Sort mungkin bukan pilihan terbaik.
3. Rekursi dalam Kasus Terburuk: Dalam implementasi rekursif, ketika terjadi kasus terburuk, Quick Sort dapat menghabiskan ruang stack yang signifikan dan bahkan memacetkan program jika kedalaman rekursinya terlalu dalam.
4. Dapat Bekerja Lebih Lambat pada Data Terstruktur: Pada beberapa kasus, Quick Sort mungkin bekerja lebih lambat daripada algoritma pengurutan lainnya jika data masukan sudah memiliki struktur tertentu (misalnya, data hampir terurut atau data yang berulang).
Untuk mengatasi beberapa kelemahan ini, beberapa variasi Quick Sort telah
dikembangkan, seperti "Randomized Quick Sort" yang menggunakan pemilihan pivot secara acak untuk menghindari kelemahan dalam kasus terburuk. Selalu perlu
mempertimbangkan karakteristik data yang akan diurutkan sebelum memilih algoritma pengurutan yang sesuai.
BAB III PENUTUP 3.1 Kesimpulan
Algoritma Quick Sort, yang diperkenalkan oleh C.A.R. Hoare pada tahun 1960, adalah algoritma pengurutan yang berbasis pembanding dan menggunakan metode divide-and- conquer. Algoritma ini disebut "Quick Sort" karena mampu mengurutkan data dengan sangat cepat. Meskipun Quick Sort memiliki kompleksitas waktu yang baik dalam kasus rata-rata (O(n log n)), ia juga memiliki beberapa kelemahan yang perlu diperhatikan.
Quick Sort bekerja dengan membagi data menjadi dua bagian, yang kemudian diurutkan secara terpisah. Meskipun ada beberapa algoritma pengurutan yang lebih cepat untuk beberapa kasus khusus, Quick Sort masih dianggap sebagai salah satu algoritma
pengurutan yang paling cepat dalam praktiknya untuk kasus umum.
Algoritma Quick Sort dapat diimplementasikan dalam berbagai bahasa pemrograman, seperti C++ dan Visual Basic. Namun, ada beberapa hal yang perlu diperhatikan saat mengimplementasikan Quick Sort untuk memastikan keakuratannya.
Dalam kesimpulan, Quick Sort adalah algoritma pengurutan yang efisien dan cepat dengan kompleksitas waktu rata-rata yang baik. Namun, penulisannya perlu
diperhatikan untuk menghindari kesalahan, dan Quick Sort memiliki beberapa
kelemahan, terutama dalam kasus terburuk, yang perlu diperhitungkan ketika memilih algoritma pengurutan yang sesuai.
Daftar Pustaka:
1. "Quick Sort dengan C++" https://7seasons.wordpress.com/tag/quick-sort- dengan-c/
2. "Algoritma Quick Sort"
https://rizarulham.wordpress.com/2009/10/07/algoritma-quick-sort/
3. "Makalah Rancangan Analisa Algoritma" https://informasi- anakutm.blogspot.co.id/2016/05/makalah-rancangan-analisa- algoritma.html?m=1
4. Wikipedia - "Quicksort" https://id.wikipedia.org/wiki/Quicksort 5. Wikipedia - "Berkas:Quicksort-diagram.svg"
https://id.wikipedia.org/wiki/Berkas:Quicksort-diagram.svg 6. "Makalah Struktur Data Quick Sort"
https://ilmubholang.wordpress.com/2013/02/07/makalah-struktur-data-quick- sort/
Daftar pustaka ini merujuk pada sumber-sumber yang digunakan dalam penulisan makalah tentang Algoritma Quick Sort. Pastikan Anda merujuk pada sumber-sumber ini untuk informasi lebih lanjut.