Algoritma dan Struktur Data pfd
Algoritma dan Struktur Data
Algoritma Pengurutan
(Sorting)
Tujuan Instruksional
Memahami algoritma pengurutan
Mengerti algoritma bubble, selection, insertion, merge sort
Topik
Algoritma pengurutan
Bubble sort
Selection sort
Insertion sort
merge sort
Sorting (Pengurutan)
Sorting merupakan suatu proses (operasi) yang
mengurutkan data dalam suatu urutan yang dikehendaki.
Pengurutan dapat dilakukan secara ascending (urut naik)
maupun descending (urut turun).
Contoh :
Misal suatu kumpulan DATA berisi 8 elemen :
DATA : 77, 33, 44, 11, 88, 22, 66, 55
Setelah diurutkan :
Ascending
: 11 22 33 44 55 66 77 88
Descending
: 88 77 66 55 44 33 22 11
Algoritma Pengurutan
Ada banyak metode yang digunakan untuk melakukan
pengurutan.
Algoritma yang dapat digunakan antara lain :
1.
2.
3.
4.
Bubble Sort
Selection Sort
Insertion Sort
Merge Sort
Bubble Sort
Metode sorting termudah
Cara pengurutannya : bandingkan dua data kemudian swap.
Diberi nama “Bubble” karena proses pengurutan secara
berangsur-angsur bergerak/berpindah ke posisinya yang tepat,
seperti gelembung.
Bubble Sort
Bubble Sort mengurutkan data dengan cara membandingkan
elemen sekarang dengan elemen berikutnya.
Ascending : Jika elemen sekarang lebih besar dari elemen
berikutnya maka kedua elemen tersebut ditukar/swap.
Descending : Jika elemen sekarang lebih kecil dari elemen
berikutnya, maka kedua elemen tersebut ditukar/swap.
Ilustrasi Bubble Sort (1)
Ilustrasi Bubble Sort (2)
Ilustrasi Bubble Sort (3)
Ilustrasi Bubble Sort (4)
Algoritma Bubble Sort
(tanpa flag)
for (i=0; i < n-1; i++){
for (j=n-1; j > i; j--) {
if (X[j] < X[j-1]) {
tmp = X[j];
X[j] = X[j-1];
X[j-1] = tmp;
}
}
}
SWAP
Time Complexity (Bubble)
Proses swap
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = 0
Proses perbandingan
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
Algoritma Bubble Sort
(dengan flag)
Flag
for (i=0; i < n-1 && status; i++){
status = false;
for (j=n-1; j > i; j--) {
if (X[j] < X[j-1]) {
tmp = X[j];
X[j] = X[j-1];
X[j-1] = tmp;
status = true;
}
}
}
SWAP
Time Complexity (Bubble)
Proses swap
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = 0
Proses perbandingan
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = n-1 = O(n)
Latihan
Urutkan data berikut dengan bubble sort :
2, 10, 3, 1, 17, 25, 16, 9, 18
Buatlah ilustrasi proses pengurutannya secara ascending
maupun descending!
Selection Sort
Cara pengurutannya : seleksi data yang ada kemudian
dilakukan swap (pertukaran posisi).
Pada Ascending : seleksi data terkecil kemudian swap.
Pada descending : seleksi data terbesar kemudian swap.
Ilustrasi Selection Sort (1)
Ilustrasi Selection Sort (2)
Ilustrasi Selection Sort (3)
Ilustrasi Selection Sort (4)
Algoritma Selection Sort (Ascending)
1. Tampung data ke-i
2. Seleksi data terkecil
3. Cek apakah data yang ditampung lebih besar dari data
hasil seleksi (data terkecil).
4. Jika pengecekan langkah 3 bernilai “true” : lakukan
pertukaran posisi antara data yang ditampung dengan
data terkecil.
5. Ulangi langkah 1 sampai 4, hingga nilai i sama dengan
n.
Selection
Sort
(Ascending)
Misalkan sekumpulan data disimpan pada A[8] dengan urutan awal =
73418265
M = data terkecil sementara, K = data terkecil (hasil seleksi)
Proses
Swap
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7]
Data awal
7
3
4
1
8
2
6
5
1
m=A[0], k = 1
7
3
4
11
8
2
6
5
2
m=A[1], k = 2
1
3
4
7
8
2
2
6
5
3
M=A[2], k = 3
1
2
4
7
8
33
6
5
4
m=A[3], k = 4
1
2
3
7
8
4
4
6
5
5
m=A[4], k = 5
1
2
3
4
8
7
6
55
6
m=A[5], k = 6
1
2
3
4
5
7
6
6
8
7
m=A[6], k = 7
1
2
3
4
5
6
7
7
8
Hasil : 1 2 3 4 5 6 7 8 (data telah terurut secara ascending)
Pseudocode Selection Sort (ascending)
Cari elemen terkecil
dari unsorted list.
for (i=0; i < n-1; i++) {
min = i;
for (j = i+1; j < n; j++) {
if (X[min] > X[j]) min = j;
}
t = X[min];
X[min] = X[i];
X[i] = t;
}
}
SWAP
Time Complexity (Selection)
Proses swap
worst case : T(n) = n = O(n)
best case : T(n) = n = O(n)
Proses perbandingan
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
Effisiensi Selection Sort
for (i=0; i < n-1; i++) {
min = i;
for (j = i+1; j < n; j++) {
if (X[min] > X[j]) min = j;
}
if (min != i) {
Pengecekkan min untuk
t = X[min];
memaksimalkan proses
X[min] = X[i];
swap
X[i] = t;
}
}
Time Complexity (Selection)
Proses swap
worst case : T(n) = n/2 = O(n)
best case : T(n) = 0
Latihan
Urutkan data berikut dengan selection sort :
2, 10, 3, 1, 17, 25, 16, 9, 18
Buatlah ilustrasi proses pengurutannya secara ascending
maupun descending!
Insertion Sort
Cara pengurutannya : dimulai dari data ke-2 sampai
dengan data terakhir, jika ditemukan data yang lebih kecil,
maka akan ditempatkan (diinsert) diposisi yang seharusnya.
Ascending : ketika perbandingan ambil data yang paling kecil.
Descending : ketika perbandingan ambil data yang paling
besar.
Algoritma Insertion Sort (Ascending)
1. Ambil satu data ke-i simpan di temp
2. Bandingkan data temp dengan data yang ada disebelah
kiri satu per-satu
3. Cek apakah data temp lebih kecil dari data sebelah kiri.
4. Jika langkah nomor 3 bernilai “true” : lakukan
pergeseran data satu-persatu kemudian pada posisi
yang tepat sisipkan data temp.
5. Ulangi langkah 1 sampai 4, hingga i sama dengan n
Insertion
Sort
(Ascending)
Misalkan sekumpulan data disimpan pada A[8] dengan urutan awal =
73418265
temp = variabel penampung
Proses
Tampung
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7]
Data awal
7
3
4
1
8
2
6
5
1
temp = A[1]
3
7
4
1
8
2
6
5
2
temp = A[2]
3
4
7
1
8
2
6
5
3
temp = A[3]
1
3
4
7
8
2
6
5
4
temp = A[4]
1
3
4
7
8
2
6
5
5
temp = A[5]
1
2
3
4
7
8
6
5
6
temp = A[6]
1
2
3
4
6
7
8
5
7
temp = A[7]
1
2
3
4
5
6
7
8
Hasil : 1 2 3 4 5 6 7 8 (data telah terurut secara ascending)
Ilustrasi Insertion Sort (1)
Ilustrasi Insertion Sort (2)
Ilustrasi Insertion Sort (3)
Algoritma Insertion Sort
Ambil data
pertama
for(i=1;i= 0; j--) {
if (t < X[j]){
X[j+1] = X[j];
X[j]=t;
}
else {
X[j+1] = t;
break;
}
}
}
Pergeseran
data
Time Complexity
Proses pergeseran (copy)
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = 0
Proses perbandingan
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = n-1 = O(n)
Latihan
Urutkan data berikut dengan insertion sort :
2, 10, 3, 1, 17, 25, 16, 9, 18
Buatlah ilustrasi proses pengurutannya secara ascending
maupun descending!
Merge Sort
Cara pengurutannya : memecah proses menjadi sub-proses.
Bagi dua deret data, bandingkan, kemudian gabungkan
(begitu seterusnya sampai selesai).
Teknik pemecahan proses menggunakan rekursif.
Merge Sort (Merging)
Permasalahan utama dipecah menjadi sub-masalah,
kemudian solusi dari sub-masalah akan membimbing
menuju solusi permasalahan utama.
Mengimplementasikan konsep rekursi.
Proses rekursi berhenti jika mencapai elemen dasar. Hal
ini terjadi bilamana bagian yang akan diurutkan
menyisakan tepat satu elemen. Sisa pengurutan satu
elemen tersebut menandakan bahwa bagian tersebut
telah terurut sesuai rangkaian.
Contoh : Merge Sort
Array A berisi 6 elemen sbb :
15
12
45
56
13
10
Masing-masing proses dalam algoritma merge sort akan
dimulai dari elemen awal dalam A dan menggabungkan
(merge) pasangan subarray yang terurut.
Ilustrasi Merge Sort (1)
Ilustrasi Merge Sort (2)
Ilustrasi Merge Sort (2)
Ilustrasi Merge Sort (2)
Ilustrasi Merge Sort (2)
Ilustrasi Merge Sort (3)
Ilustrasi Merge Sort (3)
Ilustrasi Merge Sort (3)
Algoritma Merge Sort
static void mergeSort(int l,int r)
{
if(l==r) return;
else{
int mid = (l+r)/2;
mergeSort(l, mid);
mergeSort(mid+1,r);
Merging(l,mid+1,r);
}
}
Algoritma Merging
static void Merging(int kiri,int tengah, int kanan)
{
int j=0;
int batasBawah = kiri;
int mid = tengah-1;
int n=kanan-batasBawah+1;
int tampung[] = new int[X.length];
while(kiri
Algoritma Pengurutan
(Sorting)
Tujuan Instruksional
Memahami algoritma pengurutan
Mengerti algoritma bubble, selection, insertion, merge sort
Topik
Algoritma pengurutan
Bubble sort
Selection sort
Insertion sort
merge sort
Sorting (Pengurutan)
Sorting merupakan suatu proses (operasi) yang
mengurutkan data dalam suatu urutan yang dikehendaki.
Pengurutan dapat dilakukan secara ascending (urut naik)
maupun descending (urut turun).
Contoh :
Misal suatu kumpulan DATA berisi 8 elemen :
DATA : 77, 33, 44, 11, 88, 22, 66, 55
Setelah diurutkan :
Ascending
: 11 22 33 44 55 66 77 88
Descending
: 88 77 66 55 44 33 22 11
Algoritma Pengurutan
Ada banyak metode yang digunakan untuk melakukan
pengurutan.
Algoritma yang dapat digunakan antara lain :
1.
2.
3.
4.
Bubble Sort
Selection Sort
Insertion Sort
Merge Sort
Bubble Sort
Metode sorting termudah
Cara pengurutannya : bandingkan dua data kemudian swap.
Diberi nama “Bubble” karena proses pengurutan secara
berangsur-angsur bergerak/berpindah ke posisinya yang tepat,
seperti gelembung.
Bubble Sort
Bubble Sort mengurutkan data dengan cara membandingkan
elemen sekarang dengan elemen berikutnya.
Ascending : Jika elemen sekarang lebih besar dari elemen
berikutnya maka kedua elemen tersebut ditukar/swap.
Descending : Jika elemen sekarang lebih kecil dari elemen
berikutnya, maka kedua elemen tersebut ditukar/swap.
Ilustrasi Bubble Sort (1)
Ilustrasi Bubble Sort (2)
Ilustrasi Bubble Sort (3)
Ilustrasi Bubble Sort (4)
Algoritma Bubble Sort
(tanpa flag)
for (i=0; i < n-1; i++){
for (j=n-1; j > i; j--) {
if (X[j] < X[j-1]) {
tmp = X[j];
X[j] = X[j-1];
X[j-1] = tmp;
}
}
}
SWAP
Time Complexity (Bubble)
Proses swap
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = 0
Proses perbandingan
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
Algoritma Bubble Sort
(dengan flag)
Flag
for (i=0; i < n-1 && status; i++){
status = false;
for (j=n-1; j > i; j--) {
if (X[j] < X[j-1]) {
tmp = X[j];
X[j] = X[j-1];
X[j-1] = tmp;
status = true;
}
}
}
SWAP
Time Complexity (Bubble)
Proses swap
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = 0
Proses perbandingan
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = n-1 = O(n)
Latihan
Urutkan data berikut dengan bubble sort :
2, 10, 3, 1, 17, 25, 16, 9, 18
Buatlah ilustrasi proses pengurutannya secara ascending
maupun descending!
Selection Sort
Cara pengurutannya : seleksi data yang ada kemudian
dilakukan swap (pertukaran posisi).
Pada Ascending : seleksi data terkecil kemudian swap.
Pada descending : seleksi data terbesar kemudian swap.
Ilustrasi Selection Sort (1)
Ilustrasi Selection Sort (2)
Ilustrasi Selection Sort (3)
Ilustrasi Selection Sort (4)
Algoritma Selection Sort (Ascending)
1. Tampung data ke-i
2. Seleksi data terkecil
3. Cek apakah data yang ditampung lebih besar dari data
hasil seleksi (data terkecil).
4. Jika pengecekan langkah 3 bernilai “true” : lakukan
pertukaran posisi antara data yang ditampung dengan
data terkecil.
5. Ulangi langkah 1 sampai 4, hingga nilai i sama dengan
n.
Selection
Sort
(Ascending)
Misalkan sekumpulan data disimpan pada A[8] dengan urutan awal =
73418265
M = data terkecil sementara, K = data terkecil (hasil seleksi)
Proses
Swap
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7]
Data awal
7
3
4
1
8
2
6
5
1
m=A[0], k = 1
7
3
4
11
8
2
6
5
2
m=A[1], k = 2
1
3
4
7
8
2
2
6
5
3
M=A[2], k = 3
1
2
4
7
8
33
6
5
4
m=A[3], k = 4
1
2
3
7
8
4
4
6
5
5
m=A[4], k = 5
1
2
3
4
8
7
6
55
6
m=A[5], k = 6
1
2
3
4
5
7
6
6
8
7
m=A[6], k = 7
1
2
3
4
5
6
7
7
8
Hasil : 1 2 3 4 5 6 7 8 (data telah terurut secara ascending)
Pseudocode Selection Sort (ascending)
Cari elemen terkecil
dari unsorted list.
for (i=0; i < n-1; i++) {
min = i;
for (j = i+1; j < n; j++) {
if (X[min] > X[j]) min = j;
}
t = X[min];
X[min] = X[i];
X[i] = t;
}
}
SWAP
Time Complexity (Selection)
Proses swap
worst case : T(n) = n = O(n)
best case : T(n) = n = O(n)
Proses perbandingan
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
Effisiensi Selection Sort
for (i=0; i < n-1; i++) {
min = i;
for (j = i+1; j < n; j++) {
if (X[min] > X[j]) min = j;
}
if (min != i) {
Pengecekkan min untuk
t = X[min];
memaksimalkan proses
X[min] = X[i];
swap
X[i] = t;
}
}
Time Complexity (Selection)
Proses swap
worst case : T(n) = n/2 = O(n)
best case : T(n) = 0
Latihan
Urutkan data berikut dengan selection sort :
2, 10, 3, 1, 17, 25, 16, 9, 18
Buatlah ilustrasi proses pengurutannya secara ascending
maupun descending!
Insertion Sort
Cara pengurutannya : dimulai dari data ke-2 sampai
dengan data terakhir, jika ditemukan data yang lebih kecil,
maka akan ditempatkan (diinsert) diposisi yang seharusnya.
Ascending : ketika perbandingan ambil data yang paling kecil.
Descending : ketika perbandingan ambil data yang paling
besar.
Algoritma Insertion Sort (Ascending)
1. Ambil satu data ke-i simpan di temp
2. Bandingkan data temp dengan data yang ada disebelah
kiri satu per-satu
3. Cek apakah data temp lebih kecil dari data sebelah kiri.
4. Jika langkah nomor 3 bernilai “true” : lakukan
pergeseran data satu-persatu kemudian pada posisi
yang tepat sisipkan data temp.
5. Ulangi langkah 1 sampai 4, hingga i sama dengan n
Insertion
Sort
(Ascending)
Misalkan sekumpulan data disimpan pada A[8] dengan urutan awal =
73418265
temp = variabel penampung
Proses
Tampung
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7]
Data awal
7
3
4
1
8
2
6
5
1
temp = A[1]
3
7
4
1
8
2
6
5
2
temp = A[2]
3
4
7
1
8
2
6
5
3
temp = A[3]
1
3
4
7
8
2
6
5
4
temp = A[4]
1
3
4
7
8
2
6
5
5
temp = A[5]
1
2
3
4
7
8
6
5
6
temp = A[6]
1
2
3
4
6
7
8
5
7
temp = A[7]
1
2
3
4
5
6
7
8
Hasil : 1 2 3 4 5 6 7 8 (data telah terurut secara ascending)
Ilustrasi Insertion Sort (1)
Ilustrasi Insertion Sort (2)
Ilustrasi Insertion Sort (3)
Algoritma Insertion Sort
Ambil data
pertama
for(i=1;i= 0; j--) {
if (t < X[j]){
X[j+1] = X[j];
X[j]=t;
}
else {
X[j+1] = t;
break;
}
}
}
Pergeseran
data
Time Complexity
Proses pergeseran (copy)
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = 0
Proses perbandingan
worst case : T(n) = n(n-1)/2 = (n2 –n) /2 = O(n2)
best case : T(n) = n-1 = O(n)
Latihan
Urutkan data berikut dengan insertion sort :
2, 10, 3, 1, 17, 25, 16, 9, 18
Buatlah ilustrasi proses pengurutannya secara ascending
maupun descending!
Merge Sort
Cara pengurutannya : memecah proses menjadi sub-proses.
Bagi dua deret data, bandingkan, kemudian gabungkan
(begitu seterusnya sampai selesai).
Teknik pemecahan proses menggunakan rekursif.
Merge Sort (Merging)
Permasalahan utama dipecah menjadi sub-masalah,
kemudian solusi dari sub-masalah akan membimbing
menuju solusi permasalahan utama.
Mengimplementasikan konsep rekursi.
Proses rekursi berhenti jika mencapai elemen dasar. Hal
ini terjadi bilamana bagian yang akan diurutkan
menyisakan tepat satu elemen. Sisa pengurutan satu
elemen tersebut menandakan bahwa bagian tersebut
telah terurut sesuai rangkaian.
Contoh : Merge Sort
Array A berisi 6 elemen sbb :
15
12
45
56
13
10
Masing-masing proses dalam algoritma merge sort akan
dimulai dari elemen awal dalam A dan menggabungkan
(merge) pasangan subarray yang terurut.
Ilustrasi Merge Sort (1)
Ilustrasi Merge Sort (2)
Ilustrasi Merge Sort (2)
Ilustrasi Merge Sort (2)
Ilustrasi Merge Sort (2)
Ilustrasi Merge Sort (3)
Ilustrasi Merge Sort (3)
Ilustrasi Merge Sort (3)
Algoritma Merge Sort
static void mergeSort(int l,int r)
{
if(l==r) return;
else{
int mid = (l+r)/2;
mergeSort(l, mid);
mergeSort(mid+1,r);
Merging(l,mid+1,r);
}
}
Algoritma Merging
static void Merging(int kiri,int tengah, int kanan)
{
int j=0;
int batasBawah = kiri;
int mid = tengah-1;
int n=kanan-batasBawah+1;
int tampung[] = new int[X.length];
while(kiri