IS1313-06 Algoritma Sorting & Searching (Java)
Materi kuliah
ALGORITMA
PENGURUTAN & PENCARIAN
Ir. Roedi Goernida, MT.
Program Studi Sistem Informasi – Fakultas Rekayasa Industri
Institut Teknologi Telkom
Bandung
12011
Pengelompokan Pengurutan
Pengurutan internal dilakukan terhadap sekumpulan data yang disimpan dalam media internal komputer yang dapat diakses secara langsung pada setiap elemennya. Pengurutan eksternal dilakukan terhadap data yang disimpan di dalam memori sekunder dan digunakan pada data yang cukup besar. 2
3 Metoda Pengurutan Pengurutan didasarkan kepada:
Quick sort, merge sort ●
● Pengurutan Ascending: Jika elemen sekarang lebih besar dari elemen berikutnya, maka kedua elemen tersebut ditukar.
● Mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya.`
● Merupakan proses pengurutan secara bergerak atau berpindah ke posisi yang tepat diibaratkan gelembung yang keluar dari sebuah gelas bersoda.
4 Bubble sorting (1/2)
IS1313 - 06 Hal. 2
Berkurang menurun ( diminishing increment sort diminishing increment sort )
Shell sort (pengembangan insertion)
Hand-out: Algoritma Sorting & SearchingPembagian & penguasaan ( devide and conquer devide and conquer)
● Perbandingan ( comparison-based sorting comparison-based sorting
Insertion sort, tree sort ●
● Penyisipan & penjagaan terurut ( insert & keep insert & keep sorted sorted )
) ) Selection sort, heap sort (menggunakan tree)
Prioritas ( priority queue sorting priority queue sorting
Bubble sort, exchange sort ●
) )
A[1] A[2] A[3] A[4] … A[n]
Bubble sorting (2/2)
● Pengurutan Descending: Jika elemen sekarang lebih kecil dari elemen berikutnya, maka kedua elemen tersebut ditukar.
D[1] D[2] D[3] D[4] … D[n] ●
Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau sebaliknya ●
Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses tersebut, dan seterusnya sampai dengan iterasi sebanyak n-1.
● Proses pengurutan berakhir jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan. 5 Hand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 4 (1/2)
Ilustrasi
Proses 1 Proses 2
67
25
38
13
16
9
9
67
25
38
13
16
67
25
38
13
9
16
9
67
25
38
13
16
67
25
38
9
13
16
9
67
25
13
38
16
67
25
9
38
13
16
9
67
13
25
38
16
67
9
25
38
13
16
9
13
67
25
38
16
9
67
25
38
13
16
9
13
67
25
38
16 Proses 3
9
13
67
25
38
16 `
9
13
67
25
16
38
9
13
25
16
25
38
9
13
16
67
25
38
9
13
16
67
25
38
9
13
16
67
25
38 6
Ilustrasi (2/2)
13
13
9
67
38
25
16
9
25
67
38
25
16
13
9
38
16
38
25
16
A[i] := A[i+1] A[i+1] := temp
8 Algoritma Bubble sort ba := n i := 1
if A[i] < A[i+1] then
temp := A[i]IS1313 - 06 Hal. 6
Hand-out: Algoritma Sorting & Searching
67 Proses 4 Proses 5
38
25
13
67
9
67
38
25
16
13
9
67
7
9
67
67
25
16
13
9
38
25
16
9
13
9
38
25
67
16
13
38
13
13
38
9
38
67
25
16
13
9
67
16
25
16
13
9
38
67
25
16
Selection sorting
●
Merupakan kombinasi antara sorting & searching.
●Cara pengurutannya yaitu membandingkan elemen sekarang dengan elemen berikutnya sampai elemen yang terakhir.
● Untuk setiap proses akan dicari elemen-elemen yang belum diurutkan yang memiliki nilai terkecil atau
terbesar untuk dipertukarkan ke posisi yang tepat.
● Selama proses berlangsung, pembandingan dan pengubahan hanya dilakukan pada index pembanding saja, pertukaran data secara fisik terjadi pada akhir proses. 9 Hand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 8 (1/2)
Ilustrasi
13
67
38
25
9
30
9
67
38
25
13
30
1
2
3
4
5
1
2
3
4
5 Pembanding Posisi Pembanding Posisi 13 < 67
67 > 38
2 13 < 38 38 > 25
3 13 < 25 25 > 13
4 13 > 9 * 4 13 < 30
4 9 < 30
4 Penukaran data idx-1 (67) idx-4 (13) Penukaran data idx-0 (13) idx-4 (9)
9
13
9
38
25
67
30
67
38
25
13
30
1
2
3
4
5
1
2
3
4
5
10
11
9
1
67
38
30
25
13
5
3
4
3
2
1
38
67
30
2
4
13
2
< min then min ← A i endif if A i
1 max ← A i for I 2 to n do if A i
12 Algoritma Selection sorting min ← A
IS1313 - 06 Hal. 10
5 Ilustrasi (2/2) Hand-out: Algoritma Sorting & Searching
4
3
1
5 Pembanding Posisi 67 > 38 *
38
67
30
25
13
9
5 Penukaran data idx-4 (67) idx-5 (38)
25
9
9
4
38
13
9
4 Penukaran data idx-2 (38) idx-3 (25)
3 25 < 67 * 4 67 > 30
5 Pembanding Posisi 38 > 25
3
67
2
1
30
67
38
25
13
25
30
5 Penukaran data idx-3 (38) idx-5 (30)
67
4 67 > 30 *
5 Pembanding Posisi 38 < 67
4
3
2
1
30
38
1
25
13
9
5
4
3
2
> max then maks ← A i endif endfor
- Efesien untuk ukuran data yang kecil.
- langsung melakukan pengurutan ketika ada data baru.
Data [1]
Data [7]
Data [6]
Data [5]
Data [4]
Data [3]
Data [2]
Data [0]
Data [9]
13 Insertion sorting ●
IS1313 - 06 Hal. 12
Hand-out: Algoritma Sorting & Searching
● Keuntungan: - Implementasi yang sederhana.
● Pada penyisipan elemen tersebut, maka elemen-elemen lain akan bergeser ke belakang
● Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan
ditempatkan (di-insert) pada posisi yang seharusnya.
Dapat digambarkan seperti melakukan pengurutan kartu, dimana selembar demi selembar kartu diambil dan kemudian disisipkan (insert) ke tempat yang seharusnya.
Data [8]
Iterasi
Awal
70
40
30
20
10
i=8
60
20
99
90
80
50
70
40
30
10
i=7
60
20
70
99
90
80
50
50
80
30
99
60
20
70
50
99
90
80
40
30
10
i=5
90
90
80
70
60
50
40
30
20
10
i=9
60
99
40
10
90
10
10
90
80
30
i=2
60
20
70
50
99
40
80
99
90
30
60 i=1
20
70
50
99
40
10
80
30
40
50
i=6
60
60
20
70
50
99
90
80
40
14 Ilustrasi
10
i=4
20
70
70
50
99
40
90
80
30
10
i=3
60
20
30
Algoritma insertion sorting
for i ← 2 to n do y ← A[i] j ← i – 1 found ← false
while j i ← i and (not found) do
if y < A[j] thenA[j + 1] ← A[j] j ← j – 1 else found ← true endif endwhile
A[j + 1] ← y endfor 15 Hand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 14
Shell sorting
●
Merupakan pengurutan yang paling efesien & memiliki algoritma yang kompleksitas, tetapi sederhana.
●
Pengurutan dengan metoda perbandingan dan pertukaran.
●
Membandingkan jarak elemen yang telah ditentukan dan selanjutnya dipertukarkan.
●
Penukaran dilakukan terhadap sepasang elemen untuk mencapai keadaan urut.
●
Melakukan pass atau traversal berkali-kali & setiap kali pass mengurutkan sejumlah nilai yang sama dengan ukuran set menggunakan insertion set. 16
Algoritma shell sorting
17 jarak
50
1
90
99
80
60
70
40
20
3
30
10
20 ............................ 70 ............................ 99
10 10 ............................ 50 ............................ 60 ............................90 30 ............................ 40 ............................ 80
9
8
7
2
5
4
30
99
90
80
70
60
50
40
20
5
10
(step = 1)
(step = 3)
10 Pass 1 (step = 5)
9
8
7
6
6
4
← n div 2 while jarak > 0 do for I
10
1
60
20
70
50
99
40
80
3
30
90
18 Ilustrasi
IS1313 - 06 Hal. 16
Hand-out: Algoritma Sorting & Searching
← jarak div 2 endfor endwhile
←
I + jarak
if A[I] > A[J] then tukar(A[I],A[J]) endif jarak← 1 to n – jarak do J
2
4
3
5
2
1
60
20
80
50
99
40
10
70
30
90
10 .......................................................... 20 40 .......................................................... 60
10 90 .......................................................... 99
30 .......................................................... 50
70 .......................................................... 809
8
7
6
Pass 2
Pass 3
19 Penggabungan tabel Penggabungan secara terurut dilakukan dengan memeriksa elemen isi tabel-1 & tabel-2 yang selanjutnya dibandingkan agar isi tabel-3 (tabel baru) menjadi terurut.
1
24
15
13
2
1
27
24
15
13
2
24
30 T1 T2 T3 Hand-out: Algoritma Sorting & Searching
15
13
2
1
15
13
2
1
13
2
27
IS1313 - 06 Hal. 18
2
0.56
0.05 N Perbandingan waktu sorting
1.55
1.97
0.05 15000 4.55
1.17
1.47
0.03 13000 3.50
0.83
1.05
0.02 11000 2.47
0.72
20 Waktu (detik)
1.66
0.02 9000
0.34
0.44
0.98
0.02 7000
0.17
0.22
0.52
5000
1
1
1
27
13
1
30
27
15
2
24
13
1
30
15
2
2
24
13
1
30
27
15
2
24
13
24
15
1
2
30
27
15
2
24
13
1
30
27
15
24
27
13
1
30
27
15
2
24
13
1
30
Bubble Selection Insertion Shell
21 Pencarian ●
Data seringkali dibutuhkan dalam pembacaan kembali informasi (retrieval information).
● Pencarian/searching cara untuk mendapat data yang diinginkan dengan cara menelusuri data-data tersebut.
● Pencarian elemen data pada Java terbagi atas:
Linier / sequential searching melakukan pengujian setiap item. digunakan pada data yang masih acak & berurut.
Binary searching
dengan membagi dua data: (N+1) div 2
digunakan pada data yang berurutHand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 20
22 Pencarian data pada array ●
Tempat pencarian data dapat berupa array dalam
memori, bisa juga pada file pada external storage
●Searching terbagi atas: Internal searching – algoritma pencarian yang
dilakukan dalam memori komputer.
External searching – algoritma pencarian yang melibatkan external media dan menambahkan ke memori utama.
Pencarian sequential
Proses pencarian dilakukan dengan membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama sampai elemen yang dicari ditemukan atau seluruh elemen sudah diperiksa serta dapat dilakukan dalam kondisi data apapun.
23 Hand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 22 (1/2)
Algoritma Pencarian sequential
52
87
93
28
76
21
1
2
3
4
5
6 Nilai yang dicari: 28 Elemen yang diperiksa : 52 87 93 28 Index : 4 Nilai yang dicari: 52 Elemen yang diperiksa : 52 Index : 1 Nilai yang dicari: 55
Elemen yang diperiksa : 52 87 93 28 76 21
Index : 0 2425 Algoritma Pencarian sequential (2/2) 1. begin 2. index
1 3. while index <= n
4. if key(cari) = key(index)
5. result index 6. goto 11 7. end if 8. index index + 1 9. end while 10. hasil not found 11. endHand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 24
26 Pencarian Biner (Binary Search) dilakukan untuk : ● memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang dicari dengan data yang ada di dalam tabel, khususnya untuk
jumlah data yang sangat besar ukurannya.
● Prinsip dasarnya adalah melakukan proses pembagian ruang pencarian secara berulang- ulang sampai data ditemukan atau sampai ruang pencarian tidak dapat dibagi lagi (berarti ada kemungkinan data tidak ditemukan).
Syarat utama untuk pencarian biner adalah data di dalam tabel harus sudah terurut.
Pencarian biner
27
13
8 Low Middle High
Elemen yang dicari 18
Low = 1 dan High = 8 Elemen tengah Middle = (1+8) div 2 = 9 div 2 = 4
Hand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 26
28
81
76
21
18
16
10
6
7
1
2
3
4
5
6
7
8 Low High
Elemen yang dicari 16 Iterasi 1: Langkah 1: Low = 1 dan High = 8
Elemen tengah (Middle) = (1+8) div 2 = 9 div 2 = 4 Langkah 2: Array[4] = X ? (18 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan. Jika Array[4] > 16 ?, (18 > 16) TRUE, lakukan pencarian disebelah kanan dengan Low = middle+1 ( 4+1 = 5) dan High = 8.
Algoritma Pencarian biner
(2/3)7
5
81
4
76
21
18
16
13
10
7
1
2
3
4
5
6
7
8 Low High
81
76
21
18
16
13
10
7
1
2
3
Langkah 1:
Langkah 2: Array[4] = X ? (18 = 18) true X ditemukan dan pencarian dihentikan. Algoritma Pencarian biner (1/3)
Algoritma Pencarian biner (3/3) Iterasi 2:
IS1313 - 06 Hal. 28
15. Selesai
14. Hasil tidak ketemu
10. Awal Tengah + 1 11. else Akhir Tengah - 1 12. end if 13. end while
7. Hasil Tengah 8. goto 15 9. else if Kunci(Cari) > Kunci(Tengah)
5. Tengah (Awal + Akhir) / 2 6. if Kunci(Cari) = Kunci(Tengah)
3. Akhir n 4. while Awal <= Akhir
1
2. Awal
1. Mulai
30 Algoritma Pencarian biner (3/3)
29
16
16
Elemen tengah Middle = (5+5) div 2 = 10 div 2 = 5 Langkah 2: Array[5] = X ? (16 = 16) TRUE (X ditemukan , pencarian dihentikan)
Iterasi 3: Langkah 1: Low = 5 dan High=5
Langkah 1: Low = 5 dan High=8 Elemen tengah Middle = (5+8) div 2 = 13 div 2 = 6 Langkah 2:
Array[6] = X ? (13 = 16) FALSE untuk memutuskan pencarian di kiri atau di kanan.
Jika Larik[6] > 16 ?, (13 > 16) FALSE,lakukan pencarian di sebelah KIRI --> low = 5 (TETAP) dan High = middle-1 = 5
7
6
5
7
10
13
5 Low Hand-out: Algoritma Sorting & Searching
Pencarian dengan Sentinel
3
93
28
76
21
1
2
4
52
5
6
35
7 Di isi data sentinel sesuai dengan elemen yang dicari: ●
35 ditemukan pada elemen ke-n+1. Sentinel otomatis sudah ditambahkan ke dalam larik. Ukuran larik menjadi = 7.
● 28 ditemukan pada elemen ke-4. Sentinel batal menjadi elemen yang ditambahkan ke dalam larik. Ukuran larik tetap 6.
Ilustrasi Pencarian Sentinel
87
31 Proses pencarian dengan Sentinel selalu menjamin bahwa elemen data yang dicari (x) pasti berhasil ditemukan.
Untuk menyimpulkan apakah x ditemukan pada elemen sentinel atau bukan, yaitu dengan melihat nilai idx.
28
Jika idx = n+1, x ditemukan pada sentinel x tidak terdapat di dalam array semula
(sebelum penambahan sentinel).
jika idx < n +1, x ditemukan sebelum sentinel x sudah ada di dalam larik L semula.Hand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 30
32
52
87
93
76
21
21
1
2
3
4
5
6
6 Elemen data dicari 35 & 28: Untuk Sentinel
- 1 9. else 10. idx ← ← ← ← i
33 Algoritma Pencarian Sentinel (1/2)
1. Mulai
2. L[n + 1] ← ← ← ← x 3. i ←
← ← ←
1 4. while (L[i] x) do 5. i ← ← ← ← i + 1 6. endwhile
7. if idx = n + 1 then 8. idx ← ← ← ←
11. Endif
12. Selesai Hand-out: Algoritma Sorting & Searching
IS1313 - 06 Hal. 32
34 Selesai