06 sorting
DESCRIPTION
TRANSCRIPT
![Page 1: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/1.jpg)
Struktur Data dan Algoritma
Suryana Setiawan, Ruli Manurung & Ade Azurat(acknowledgments: Denny)
Fasilkom UI
SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P 2009/2010 – Ganjil – Minggu 5
Sorting
![Page 2: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/2.jpg)
2SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
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
Outline
![Page 3: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/3.jpg)
3SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
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
Bayangkan jika data di atas tidak terurut!
![Page 4: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/4.jpg)
4SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
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!
![Page 5: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/5.jpg)
5SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Bubble sort: Sebuah iterasi
40 2 1 43 3 65 0 -1 58 3 42 42 40 1 43 3 65 0 -1 58 3 42 42 40 1 43 3 65 0 -1 58 3 42 42 1 40 43 3 65 0 -1 58 3 42 42 1 40 43 3 65 0 -1 58 3 42 42 1 40 43 3 65 0 -1 58 3 42 42 1 40 3 43 65 0 -1 58 3 42 42 1 40 3 43 65 0 -1 58 3 42 42 1 40 3 43 65 0 -1 58 3 42 42 1 40 3 43 0 65 -1 58 3 42 42 1 40 3 43 0 65 -1 58 3 42 42 1 40 3 43 0 -1 65 58 3 42 42 1 40 3 43 0 -1 65 58 3 42 42 1 40 3 43 0 -1 58 65 3 42 42 1 40 3 43 0 -1 58 65 3 42 42 1 40 3 43 0 -1 58 3 65 42 42 1 40 3 43 0 -1 58 3 65 42 42 1 40 3 43 0 -1 58 3 42 65 42 1 40 3 43 0 -1 58 3 42 65 42 1 40 3 43 0 -1 58 3 42 4 65
![Page 6: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/6.jpg)
6SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Bubble sort: Iterasi berikutnya
40 2 1 43 3 65 0 -1 58 3 42 4
652 1 40 3 43 0 -1 58 3 42 4
65581 2 3 40 0 -1 43 3 42 4
1 2 3 400 65-1 43 583 42 4
1
2
3
4
Perhatikan bahwa pada setiap iterasi, dapat dipastikan satu elemen akan menempati tempat yang benar
![Page 7: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/7.jpg)
7SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
1 0 -1 32 653 43 5842404
Bubble sort: Terminasi algoritma
0 -1 1 2 653 43 58424043
-1 0 1 2 653 43 58424043
6
7
8
Berhenti di sini! Mengapa?
1 2 0 3-1 3 40 6543 584245
![Page 8: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/8.jpg)
8SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Bubble sort: Algoritmavoid 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; }}
![Page 9: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/9.jpg)
9SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Bubble sort Running time:
Worst case: O(n2) 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)
![Page 10: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/10.jpg)
10SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Selection sort: Ide dasar Kondisi awal:
Unsorted list = data Sorted list = kosong
Ambil yang terbaik (select) dari unsorted list, tambahkan di belakang sorted list.
Lakukan terus sampai unsorted list habis.
![Page 11: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/11.jpg)
11SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
4240 2 1 3 3 4 0 -1 655843
40 2 1 43 3 4 0 -1 42 65583
40 2 1 43 3 4 0 -1 58 3 6542
40 2 1 43 3 65 0 -1 58 3 42 4
Selection sort: Contoh
![Page 12: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/12.jpg)
12SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
4240 2 1 3 3 4 0 655843-1
42-1 2 1 3 3 4 0 65584340
42-1 2 1 3 3 4 655843400
42-1 2 1 0 3 4 655843403
Selection sort: Contoh (lanj.)
![Page 13: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/13.jpg)
13SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
1
42-1 2 1 3 4 6558434030
42-1 0 3 4 6558434032
1 42-1 0 3 4 6558434032
1 420 3 4 6558434032-1
1 420 3 4 6558434032-1
Selection sort: Contoh (lanj.)
![Page 14: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/14.jpg)
14SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Selection sort: Algoritmavoid 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.
![Page 15: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/15.jpg)
15SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Selection sort: Analisis Running time:
Worst case: O(n2) Best case: O(n2)
Berdasarkan analisis big-oh, apakah selection sort lebih baik dari bubble sort?
Apakah running time yang sebenarnya merefleksikan analisis tersebut?
![Page 16: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/16.jpg)
16SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
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.
![Page 17: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/17.jpg)
17SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
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
Insertion sort: Contoh
![Page 18: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/18.jpg)
18SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
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
Insertion sort: Contoh (lanj.)
![Page 19: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/19.jpg)
19SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
1 2 3 40 43 65 0 -1 58 3 42 4
1 2 3 40 43 650 -1 58 3 42 4
1 2 3 40 43 650 58 3 42 41 2 3 40 43 650-1
Insertion sort: Contoh (lanj.)
![Page 20: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/20.jpg)
20SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
1 2 3 40 43 650 58 3 42 41 2 3 40 43 650-1
1 2 3 40 43 650 58 42 41 2 3 3 43 650-1 5840 43 65
1 2 3 40 43 650 42 41 2 3 3 43 650-1 5840 43 65
Insertion sort: Contoh (lanj.)
1 2 3 40 43 650 421 2 3 3 43 650-1 584 43 6542 5840 43 65
![Page 21: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/21.jpg)
21SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
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 Insertion sort untuk mengurutkan array integer
Perhatikan: ternyata nilai di a[jj] selalu sama ⇒ kita dapat melakukan efisiensi di sini!
Ambil elemen pertama dalam unsorted list.
Sisipkan ke dalam sorted list.
![Page 22: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/22.jpg)
22SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Insertion sort: Algoritma (modif.) Insertion sort yang lebih efisien:
public static void insertionSort2 (int[] a){ for (int ii = 1; ii < a.length; ii++) { int temp = a[ii]; int jj = ii; while (( jj > 0) && (temp < a[jj - 1])) { a[jj] = a[jj - 1]; jj--; } a[jj] = temp; }}
![Page 23: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/23.jpg)
23SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Insertion sort: Analisis Running time analysis:
Worst case: O(n2) Best case: O(n)
Apakah insertion sort lebih cepat dari selection sort?
Perhatikan persamaan dan perbedaan antara insertion sort dan selection sort.
![Page 24: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/24.jpg)
24SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Terhantam tembok kompleksitas… Bubble sort, Selection sort, dan Insertion sort
semua memiliki worst case sama: O(N2). Ternyata, untuk algoritma manapun yang
pada dasarnya menukar elemen bersebelahan (adjacent items), ini adalah “best worst case”: Ω(N2)
Dengan kata lain, disebut lower bound Bukti: Section 8.3 buku Weiss
![Page 25: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/25.jpg)
25SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
40 2 1 43 3 65 0 -1 58 3 42 4
Original:
5-sort: Sort setiap item yang berjarak 5:
40 2 1 43 3 65 0 -1 58 3 42 4
Shell sort
Ide Donald Shell (1959): Tukarlah elemen yang berjarak jauh!
![Page 26: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/26.jpg)
26SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
40 2 1 43 3 65 0 -1 58 3 42 4
Original:
40 0 -1 43 3 42 2 1 58 3 65 4
After 5-sort:
2 0 -1 3 1 4 40 3 42 43 65 58
After 3-sort:
Shell sort
After 1-sort:
1 2 3 40 43 650 421 2 3 3 43 650-1 584 43 6542 5840 43 65
![Page 27: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/27.jpg)
27SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Shell sort: Gap values Gap: jarak antara elemen yang di-sort. Seiring berjalannya waktu, gap
diperkecil. Shell sort juga dikenal sebagai Diminishing Gap Sort.
Shell mengusulkan mulai dengan ukuran awal gap = N/2, dan dibagi 2 setiap langkah.
Ada banyak variasi pemilihan gap.
![Page 28: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/28.jpg)
28SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
NShell sort
Shell's Nilai gap ganjil Dibagi 2.21000 122 11 11 92000 483 26 21 234000 1936 61 59 548000 7950 153 141 114
16000 32560 358 322 26932000 131911 869 752 57564000 520000 2091 1705 1249
Insertion sort
O(N3/2 ) O(N5/4 ) O(N7/6 )
Kinerja Shell sort
Ada 3 “nested loop”, tetapi Shell sort masih lebih baik dari Insertion sort. Mengapa?
![Page 29: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/29.jpg)
29SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Merge sort: Ide dasar Divide and conquer approach Idenya:
Menggabungkan (merge) 2 sorted array butuh waktu O(n) Membagi sebuah array jadi 2 hanya butuh waktu O(1)
1 2 3 40 43 65 -1 0 3 4 42 58
-1 1 0 2 3 3 4 40 42 43 58 65
CounterA CounterB
Counterc
![Page 30: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/30.jpg)
30SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Merge sort: Implementasi operasi merge
Implementasikan method yang me-merge 2 sorted array ke dalam 1 sorted array!
Asumsi: a dan b sudah ter-sort, |c| = |a|+|b|
public static void merge (int[] a, int[] b, int[] c){
}
Bisakah anda implementasikan tanpa perlu temporary space?
![Page 31: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/31.jpg)
31SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Merge sort: Algoritma rekursif Base case: jika jumlah elemen dalam array
yang perlu di-sort adalah 0 atau 1. Recursive case: secara rekursif, sort bagian
pertama dan kedua secara terpisah. Penggabungan: Merge 2 bagian yang sudah
di-sort menjadi satu.
![Page 32: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/32.jpg)
32SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
40 2 1 43 3 65 0 -1 58 3 42 4
40 2 1 43 3 65 0 -1 58 3 42 4
40 2 1 43 3 65 0 -1 58 3 42 4
40 2 1 43 3 65 0 -1 58 3 42 4
split
Merge sort: Contoh
![Page 33: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/33.jpg)
33SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
40 2 1 43 3 65 0 -1 58 3 42 4
2 1 3 65 -1 58 42 4
40 1 2 43 3 65 0 -1 58 3 4 42
split
merge
1 2 40 3 43 65 -1 0 58 3 4 42
Merge sort: Contoh (lanj.)
![Page 34: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/34.jpg)
34SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
merge
1 2 40 3 43 65 -1 0 58 3 4 42
1 2 3 40 43 65 -1 0 3 4 42 58
-1 0 1 2 3 3 4 40 42 43 58 62
Merge sort: Contoh (lanj.)
![Page 35: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/35.jpg)
35SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Merge sort: Analisis Running Time: O(n log n) Mengapa?
![Page 36: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/36.jpg)
36SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Quick sort: Ide dasar Divide and conquer approach Algoritma quickSort(S):
Jika jumlah elemen dalam S = 0 atau 1, return. Pilih sembarang elemen v ∈ S – sebutlah pivot. Partisi S – {v} ke dalam 2 bagian:
•L = {x ∈ S – {v} | x ≤ v}•R = {x ∈ S – {v} | x ≥ v}
Kembalikan nilai quickSort(S), diikuti v, diikuti quickSort(S).
![Page 37: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/37.jpg)
37SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
40
2
1
3 43
65
0
-158
3
42
4
Quick sort: Pilih elemen pivot
![Page 38: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/38.jpg)
38SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
40
2
1
343
65
0
-1 583
42
4
Quick sort: Partition
![Page 39: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/39.jpg)
39SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
21 3 43 650-1 583 424
21 3 43 650-1 583 424 40
Quick sort: Sort scr. rekursif, gabungkan
40
![Page 40: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/40.jpg)
40SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
40 2 1 43 3 65 0 -1 58 3 42 4
left
402 1 43 3 65 0 -1 58 3 424
402 1 433 65 0 -1 58 3 424
40
right
Quick sort: Partition algorithm 1
![Page 41: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/41.jpg)
41SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
402 1 433 65 0 -1 583 424
402 1 433 650 -1 583 424
402 1 433 65-1 0 583 424
402 1 433 65-1 0 583 424
left right
Quick sort: Partition algorithm 1
![Page 42: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/42.jpg)
42SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
-1 3210 3 4 40 42 43 58 65
-1 21 33 42
21 30-1 3 4342 65
2 1 30 -13 4 42 655843
40 2 1 43 3 65 0 -1 58 3 42 4
402 1 433 650-1 583 424
332
32
3
Quick sort: Partition algorithm 1
![Page 43: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/43.jpg)
43SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Quick sort: Partition algorithm 2
40 2 1 43 3 65 0 -1 58 3 42 440Original:
pivot = 40
4 2 1 43 3 65 0 -1 58 3 42 40
402 1 43 3 65 0 -1 58 3 424
rightleft
402 1 3 3 65 0 -1 58 43 424
rightleft
while < pivot left++ while >= pivot right++
“buang” pivot sementara
![Page 44: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/44.jpg)
44SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Quick sort: Partition algorithm 2
402 1 3 3 65 0 -1 58 43 424
rightleft
402 1 3 3 -1 0 65 58 43 424
rightleft
402 1 3 3 -1 0 65 58 43 424
right leftCROSSING!
sort (rekursif)sort (rekursif)
![Page 45: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/45.jpg)
45SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Quick sort: Implementasistatic void quickSort(int a[], int low, int high) { if(high <= low) return; // base case pivot = choosePivot(a); // select “best” pivot
int i=low, j=high-1; swap(a,pivot,a[j]); // move pivot out of the way while(i <= j) { // find large element starting from left while(i<high && a[i]<pivot) i++;
// find small element starting from right while(j>low && a[j]>=pivot) j--;
// if the indexes have not crossed, swap if(i>j) swap(a, i, j); } swap(a,i,high-1); // restore pivot quickSort(a,low,i-1); // sort small elements quickSort(a,i+1,high); // sort large elements}
![Page 46: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/46.jpg)
46SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Quick sort: Analisis Proses partitioning butuh waktu: O(n) Proses merging butuh waktu: O(1) Untuk setiap recursive call, algoritma
quicksort butuh waktu: O(n) Pertanyaannya: berapa recursive call
dibutuhkan untuk men-sort sebuah array?
![Page 47: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/47.jpg)
47SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Quick sort: Memilih pivot Pivot ideal:
Elemen media Yang biasa dijadikan calon pivot:
Elemen pertama Elemen terakhir Elemen di tengah-tengah Median dari ketiga elemen tsb.
![Page 48: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/48.jpg)
48SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Generic sort Semua algoritma yang telah kita lihat men-
sort int. Bagaimana jika kita ingin sort String? DataMhs? CD?
Apa perlu dibuat method untuk setiap class? Tidak!
Agar object bisa di-sort, mereka harus bisa dibandingkan dengan object lainnya (comparable).
Solusinya: Gunakan interface yang mengandung method
yang dapat membandingkan dua buah object.
![Page 49: 06 sorting](https://reader034.vdocument.in/reader034/viewer/2022051013/5499d384b47959744d8b5898/html5/thumbnails/49.jpg)
49SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 – Ganjil – Minggu 5
Interface java.lang.comparable Dalam Java, sifat generik “comparable” didefinisikan
dalam interface java.lang.comparable:
Method compareTo returns: <0: object (this) “lebih kecil” dari
parameter ‘ob’ 0: object (this) “sama dengan”
parameter ‘ob’ >0: object (this) “lebih besar” dari
parameter ‘ob’
public interface Comparable{ public int compareTo (Object ob);}