Kuliah 12 - Algoritma Sorting
Kuliah 12 - Algoritma Sorting
Pengurutan
Sub Capaian Pembelajaran
Setelah mempelajari bab ini, mahasiswa diharapkan mampu:
Pendahuluan
Algoritma pengurutan adalah salah satu topik fundamental dalam ilmu komputer
yang penting untuk dikuasai. Pengurutan data diperlukan dalam berbagai
aplikasi, seperti pencarian data yang efisien, pengaturan data dalam laporan,
dan pengelolaan basis data. Pada bab ini, kita akan membahas beberapa
algoritma pengurutan yang umum digunakan, yaitu Bubble Sort, Selection Sort,
Merge Sort, dan Quick Sort. Setiap algoritma akan dijelaskan secara rinci
dengan contoh program dalam bahasa C++.
Bubble Sort
Bubble Sort adalah salah satu algoritma pengurutan paling sederhana.
Algoritma ini bekerja dengan cara membandingkan elemen-elemen
berpasangan dan menukar posisi mereka jika berada dalam urutan yang salah.
Proses ini diulang hingga tidak ada lagi pasangan elemen yang perlu ditukar.
#include <iostream>
using namespace std;
int main() {
int arr[] = {64, 34, 25, 12, 22};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);
cout << "Array setelah pengurutan: \\n";
printArray(arr, n);
return 0;
}
Output:
Penjelasan:
Program di atas terdiri dari beberapa fungsi yang bekerja sama untuk
mengurutkan array menggunakan algoritma Bubble Sort dan mencetak array
yang sudah terurut. Berikut adalah penjelasan detil dari setiap bagian program:
1. Fungsi bubbleSort
Loop luar: Berjalan dari i = 0 hingga n-1 . Loop ini memastikan bahwa
seluruh array telah diurutkan setelah n-1 iterasi.
3. Fungsi main
Fungsi main adalah titik awal eksekusi program. Fungsi ini melakukan beberapa
tugas:
Selection Sort
Selection Sort adalah algoritma pengurutan yang bekerja dengan cara
menemukan elemen terkecil dari bagian array yang belum terurut dan
menukarnya dengan elemen pertama dari bagian yang belum terurut tersebut.
Proses ini diulang hingga seluruh array terurut.
Di awal algoritma, isi array adalah {64, 34, 25, 12, 22}.
Putaran 1: Pada putaran pertama, elemen pertama (64) dianggap sebagai nilai
minimum sehingga indeks minimum diatur sebagai indeks dari elemen pertama
(index minimum=0). Algoritma kemudian membandingkan nilainya dengan nilai
elemen array yang lain, jika nilainya lebih kecil, indeks elemen tersebut
menggantikan indeks minimum:
a. 34 dan 64: karena 34 lebih kecil dari 64, maka indeks minimum = 1
b. 25 dan 34: karena 25 lebih kecil dari 34, maka indeks minimum = 2
c. 12 dan 25: karena 12 lebih kecil dari 25, maka indeks minimum = 3
d. 22 dan 12: karena 22 lebih besar dari 22, maka indeks minimum tetap
a. 25 dan 34: karena 25 lebih kecil dari 34, maka indeks minimum = 2
b. 64 dan 25: karena 64 lebih besar dari 25, maka indeks minimum tetap
c. 22 dan 25: karena 22 lebih kecil dari 25, maka indeks minimum = 4
Dengan demikian pada akhir putaran 2, indeks minimum akan berisi indeks dari
elemen dengan nilai terkecil (22) yaitu indeks minimum = 4. Selanjutnya, nilai
dari elemen pada indeks minimum (22) ditukar dengan nilai elemen kedua (34)
sehingga isi array menjadi {12, 22, 25, 64, 34} dan elemen kedua (22) dianggap
sudah tersortir.
Putaran 3: Pada putaran ketiga, elemen ketiga (25) dianggap sebagai nilai
minimum sehingga indeks minimum diatur sebagai indeks dari elemen ketiga
(index minimum=2). Algoritma kemudian membandingkan nilainya dengan nilai
elemen array yang lain, jika nilainya lebih kecil, indeks elemen tersebut
menggantikan indeks minimum:
a. 64 dan 25: karena 64 lebih besar dari 25, maka indeks minimum tetap
b. 34 dan 25: karena 34 lebih besar dari 25, maka indeks minimum tetap
Dengan demikian pada akhir putaran 3, indeks minimum tidak berubah, yakni
indeks minimum = 2, sehingga isi array tetap {12, 22, 25, 64, 34} dan elemen
ketiga (25) dianggap sudah tersortir.
Putaran 4: Pada putaran keempat, elemen keempat (64) dianggap sebagai nilai
minimum sehingga indeks minimum diatur sebagai indeks dari elemen keempat
(index minimum=3). Algoritma kemudian membandingkan nilainya dengan nilai
elemen array yang lain, jika nilainya lebih kecil, indeks elemen tersebut
menggantikan indeks minimum. Cuma ada satu perbandingan yakni 34 dan 64:
karena 34 lebih kecil dari 64, maka indeks minimum = 4.
#include <iostream>
using namespace std;
int main() {
int arr[] = {64, 34, 25, 12, 22};
int n = sizeof(arr)/sizeof(arr[0]);
selectionSort(arr, n);
Output:
Penjelasan:
Program di atas menggunakan algoritma Selection Sort untuk mengurutkan
array. Berikut adalah penjelasan rinci dari setiap bagian program:
1. Fungsi selectionSort
Loop luar: Berjalan dari i = 0 hingga n-1 . Loop ini memastikan bahwa
seluruh array telah diurutkan setelah n-1 iterasi.
Loop dalam: Berjalan dari j = i+1 hingga n . Loop ini menemukan elemen
terkecil dari bagian array yang belum terurut dan menukarnya dengan
elemen pertama dari bagian yang belum terurut tersebut.
2. Fungsi printArray
3. Fungsi main
Fungsi main adalah titik awal eksekusi program. Fungsi ini melakukan beberapa
tugas:
Merge Sort
Merge Sort adalah algoritma pengurutan yang menggunakan pendekatan
divide and conquer. Algoritma ini membagi array menjadi dua bagian,
mengurutkan setiap bagian secara rekursif, dan kemudian menggabungkan dua
bagian yang terurut tersebut.
#include <iostream>
using namespace std;
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
int main() {
int arr[] = {12, 11, 13, 5, 6, 7};
int n = sizeof(arr)/sizeof(arr[0]);
mergeSort(arr, 0, n - 1);
cout << "Array setelah pengurutan: \\n";
printArray(arr, n);
return 0;
}
Penjelasan:
Program di atas mengimplementasikan algoritma Merge Sort dalam bahasa
C++. Berikut adalah penjelasan rinci dari setiap bagian program:
1. Fungsi merge
Membagi array menjadi dua sub-array: Array arr dibagi menjadi dua sub-
array, L dan R , berdasarkan indeks l , m , dan r .
2. Fungsi mergeSort
Membagi array: Jika indeks awal l lebih kecil dari indeks akhir r , array
dibagi menjadi dua bagian dengan menemukan indeks tengah m .
3. Fungsi printArray
Fungsi main adalah titik awal eksekusi program. Fungsi ini melakukan beberapa
tugas:
Quick Sort
Quick Sort adalah algoritma pengurutan yang menggunakan pendekatan divide
and conquer. Algoritma ini memilih elemen pivot dan membagi array menjadi
dua bagian, dimana satu bagian berisi elemen yang lebih kecil dari pivot dan
bagian lainnya berisi elemen yang lebih besar dari pivot. Proses ini diulang
secara rekursif untuk setiap bagian.
#include <iostream>
using namespace std;
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n - 1);
cout << "Array setelah pengurutan: \\n";
printArray(arr, n);
return 0;
}
Penjelasan:
Fungsi swap bertugas untuk menukar nilai dari dua elemen dalam array. Fungsi
ini menerima dua parameter: pointer a dan pointer b . Proses penukaran
dilakukan dengan menggunakan variabel sementara t untuk menyimpan nilai
sementara dari a .
2. Fungsi partition
Fungsi partition bertanggung jawab untuk membagi array menjadi dua bagian
berdasarkan pivot. Fungsi ini menerima tiga parameter: array arr , indeks
rendah low , dan indeks tinggi high . Proses partisi dilakukan dengan langkah-
langkah berikut:
3. Fungsi quickSort
Memanggil fungsi partition : Jika indeks rendah low lebih kecil dari indeks
tinggi high , fungsi partition dipanggil untuk membagi array menjadi dua
bagian berdasarkan pivot.
4. Fungsi printArray
Fungsi main adalah titik awal eksekusi program. Fungsi ini melakukan beberapa
tugas:
Perbandingan Algoritma-algoritma
Pengurutan
Berikut ini adalah perbandingan antara beberapa algoritma pengurutan yang
telah dibahas, yaitu Bubble Sort, Selection Sort, Merge Sort, dan Quick Sort.
Setiap algoritma memiliki kelebihan dan kekurangan masing-masing:
Bubble Sort
Kelebihan: Mudah dipahami dan diimplementasikan. Cocok untuk dataset
kecil dan hampir terurut.
Selection Sort
Kelebihan: Mudah dipahami dan diimplementasikan. Tidak memerlukan
banyak pertukaran elemen.
Merge Sort
Kelebihan: Sangat efisien dengan kompleksitas waktu O(n log n). Stabil dan
bekerja baik untuk dataset besar.
Quick Sort
Kelebihan: Sangat cepat untuk dataset besar dengan kompleksitas waktu
rata-rata O(n log n). Tidak memerlukan ruang tambahan yang signifikan.
Kekurangan: Kinerja bisa menurun menjadi O(n²) pada kasus terburuk jika
pemilihan pivot tidak optimal. Tidak stabil.
Kesimpulan
Pada bab ini, kita telah mempelajari berbagai algoritma pengurutan yang umum
digunakan, yaitu Bubble Sort, Selection Sort, Merge Sort, dan Quick Sort.
Setiap algoritma memiliki karakteristik dan kompleksitas yang berbeda, serta
cocok untuk situasi yang berbeda. Memahami dan mengimplementasikan
algoritma-algoritma ini akan membantu mahasiswa dalam menangani berbagai
masalah pengurutan data dalam pemrograman.