Struktur Data dan Algoritma
Suryana Setiawan, Ruli Manurung & Ade Azurat
(acknowledgments: Denny)
Fasilkom UI
Beberapa algoritma untuk melakukan
sorting:
Bubble sort
Selection sort
Insertion sort
Shell sort
Merge sort
Quick sort
Untuk masing-masing algoritma:
Ide dasar
Contoh eksekusi
Algoritma
Analisa
running time
/kompleksitas
Sort
Sorting
= pengurutan
Sorted
= terurut menurut kaidah/aturan
tertentu
Data pada umumnya disajikan dalam bentuk
sorted
.
Contoh:
Nama di buku telpon
Kata-kata dalam kamus
File-file di dalam sebuah directory
Indeks sebuah buku
Data mutasi rekening tabungan
CD di toko musik
Bubble sort: Ide dasar
Bubble = busa/udara dalam air – apa yang
terjadi?
Busa dalam air akan naik ke atas. Mengapa?
Ketika busa naik ke atas, maka air yang di
atasnya akan turun memenuhi tempat bekas busa
tersebut.
Pada setiap iterasi, bandingkan elemen
dengan sebelahnya:
yang busa naik, yang air
turun!
Bubble sort: Sebuah iterasi
Bubble sort: Iterasi berikutnya
40
2
1
43
3
65
0
-1 58
3
42
4
65
2
1
40
3
43
0
-1 58
3
42
4
65
58
1
2
3
40
0
-1 43
3
42
4
1
2
3
0
-1
40
3
42
4
43 58
65
1
2
3
4
Perhatikan bahwa pada setiap iterasi, dapat
1
0
-1
2
3
3
4
40
42
43 58
65
Bubble sort: Terminasi algoritma
0
-1
1
2
3
3
4
40
42
43 58
65
-1
0
1
2
3
3
4
40
42
43 58
65
6
7
8
1
2
0
-1
3
3
40
4
42
43 58
65
5
Bubble sort: Algoritma
void sort(int a[]) throws Exception
{
for (int i = a.length; i>=0; i--) {
boolean swapped = false;
for (int j = 0; j<i; j++) {
...
if (a[j] > a[j+1]) {
int T = a[j];
a[j] = a[j+1];
a[j+1] = T;
swapped = true;
}
...
}
if (!swapped)
return;
}
Bubble sort
Running time:
Worst case: O(n
2
)
Best case: O(n) – kapan? Mengapa?
Variasi:
bi-directional bubble sort
•
original bubble sort: hanya bergerak ke satu
arah
•
bi-directional bubble sort bergerak dua arah
(bolak balik)
Selection sort: Ide dasar
Kondisi awal:
Unsorted list = data
Sorted list = kosong
Ambil yang terbaik (
select
) dari unsorted list,
tambahkan
di belakang sorted list.
42
40
2
1
3
3
4
0
-1
43
58
65
40
2
1
43
3
4
0
-1 42
3
58
65
40
2
1
43
3
4
0
-1 58
3
42
65
40
2
1
43
3
65
0
-1 58
3
42
4
42
40
2
1
3
3
4
0
-1
43
58
65
42
-1
2
1
3
3
4
0
40
43
58
65
42
-1
2
1
3
3
0
4
40
43
58
65
42
-1
2
1
0
3
3
4
40
43
58
65
1
42
-1
2
1
0
3
3
4
40
43
58
65
42
-1
0
2
3
3
4
40
43
58
65
1
42
-1
0
2
3
3
4
40
43
58
65
1
42
0
2
3
3
4
40
43
58
65
-1
1
42
0
2
3
3
4
40
43
58
65
-1
Selection sort: Algoritma
void sort(int a[]) throws Exception
{
for (int i = 0; i < a.length; i++) {
int min = i;
for (int j = i + 1; j < a.length; j++)
if (a[j] < a[min])
min = j;
int T = a[min];
a[min] = a[i];
a[i] = T;
}
}
Cari elemen
terkecil dari
unsorted list.
Pindahkan ke
akhir sorted
list.
Selection sort: Analisis
Running time:
Worst case: O(n
2
)
Best case: O(n
2
)
Berdasarkan analisis
big-oh
, apakah
selection sort lebih baik dari bubble sort?
Apakah running time yang
sebenarnya
Insertion sort: Ide dasar
Kondisi awal:
Unsorted list = data
Sorted list = kosong
Ambil
sembarang
elemen dari unsorted list,
sisipkan (
insert
) pada posisi yang benar
dalam sorted list.
Lakukan terus sampai unsorted list habis.
Bayangkan anda mengurutkan kartu.
40
2
1
43
3
65
0
-1 58
3
42
4
2
40
1
43
3
65
0
-1 58
3
42
4
1
2
40 43
3
65
0
-1 58
3
42
4
40
1
2
3
40 43 65
0
-1 58
3
42
4
1
2
40 43
3
65
0
-1 58
3
42
4
1
2
3
40 43 65
0
-1 58
3
42
4
1
2
3
40 43 65
0
-1 58
3
42
4
1
2
3
40 43 65
0
-1 58
3
42
4
1
2
3
40 43 65
0
0
1
2
3
40 43 65
58
3
42
4
-1
1
2
3
40 43 65
0
0
1
2
3
40 43
58
65
3
42
4
-1
1
2
3
40 43 65
0
0
1
2
3
3
43
58
65
42
4
-1
40 43
58
65
1
2
3
40 43 65
0
0
1
2
3
3
43
42
65
4
-1
40
43
58
65
Insertion sort: Contoh (lanj.)
1
2
3
40 43 65
0
0
1
2
3
3
43
42
65
public static void insertionSort (int[] a)
{
for (int ii = 1; ii < a.length; ii++) {
int jj = ii;
while (( jj > 0) && (a[jj] < a[jj - 1])) {
int temp = a[jj];
a[jj] = a[jj - 1];
a[jj - 1] = temp;
jj--;
}
}
}
Insertion sort: Algoritma