BAB 10 Pencarian
BAB 10 Pencarian
1) Memilih teknik sorting mana yang sesuai serta dapat menggunakan teknik searching dalam
mencari elemen pada suatu data.
2) Mengenal jenis-jenis metode sorting dan searching, serta mampu menerapkannya didalam
sebuah program sederhana.
10.2 Pendahuluan
Sorting dan searching merupakan salah satu operasi dasar dalam ilmu komputer. Sorting
merupakan suatu proses (operasi) yang mengurutkan data dalam suatu urutan yang diberikan
(increasing atau decreasing). Searching merupakan suatu proses (operasi) untuk mencari lokasi
dari data yang diberikan dalam suatu urutan data.
Secara tidak langsung sorting dan searching menunjuk pada operasi file yang merupakan
kumpulan suatu dari record. Masing-masing record dalam file F dapat berisi banyak field, tetapi
terdapat 1 buah field yang memiliki nilai unique atau merupakan key yang unique dalam record
tersebut. Misal field K merupakan key unique yang disebut primary key, maka proses sorting file
F akan berdasarkan key unique tersebut dan proses searching untuk mencari record tertentu
berdasarkan nilai key unique yang diberikan.
Misal A merupakan suatu daftar dari n elemen A1, A2, ..., An dalam memori. Sorting A
merupakan operasi yang mengatur elemen dalam A sehingga ada dalam urutan yang terurut, misal
dalam increasing order sehingga :
A1 £ A2 £ A3 £ ..... £ An
Contoh :
Setelah diurutkan :
a. Insertion Sort
Misal array A dengan n elemen A[1], A[2], ..... , A[N] dalam memori. Algoritma Insertion Sort
memeriksa A dari A[1] sampai dengan A[N], menyisipkan setiap elemen A[K] ke dalam posisi
yang seharusnya dalam subarray terurut A[1], A[2], ..... , A[K-1].
Algoritma sorting ini umumnya digunakan apabila jumlah elemennya sedikit (n kecil). Masalah
yang akan muncul dengan metoda ini adalah bagaimana cara menyisipkan A[K] ke dalam letak
yang seharusnya pada subarray terurut A[1], A[2], ....., A[K-1]. Hal ini dapat dilakukan dengan
membandingkan A[K] dengan A[K-1], kemudian A[K] dengan A[K-2], A[K] dengan A[K-3] dan
seterusnya, sampai menemukan elemen A[J] dimana A[J] £ A[K].
Algoritma ini menggunakan sentinel elemen (A[0]) yang digunakan sebagai perbandingan. Yang
dimaksud dengan sentinel elemen adalah elemen yang memiliki nilai yang sangat kecil.
Proses A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
K = 1: -¥ 77 33 44 11 88 22 66 55
K = 2: -¥ 77 33 44 11 88 22 66 55
K = 3: -¥ 33 77 44 11 88 22 66 55
K = 4: -¥ 33 44 77 11 88 22 66 55
K = 5: -¥ 11 33 44 77 88 22 66 55
K = 6: -¥ 11 33 44 77 88 22 66 55
K = 7: -¥ 11 22 33 44 77 88 66 55
K = 8: -¥ 11 22 33 44 66 77 88 55
Urutan : -¥ 11 22 33 44 55 66 77 88
Contoh :
Tabel 10.1 menggambarkan algoritma insertion sort. Elemen yang dilingkari menandakan A[K]
dalam masing-masing proses dari algoritma, dan tanda panah menandakan letak yang seharusnya
untuk menyisipkan A[K].
a. A[PTR+1] = A[PTR]
b. PTR = PTR - 1
5. A[PTR+1] = Temp
6. Return
b. Selection Sort
Array A dengan n elemen A[1], A[2], ....., A[N] dalam memori. Algoritma untuk mengurutkan A
sebagai berikut : Pertama, cari elemen terkecil dalam array A dan letakkan pada posisi pertama
dalam array tersebut. Kemudian cari elemen kedua terkecil dalam array A dan letakkan dalam
posisi kedua dari array tersebut, dan begitu seterusnya.
Proses 1 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
terdiri dari N elemen , A[1], A[2], ...., A[N] dan kemudian tukar posisi
Proses 2 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
terdiri dari N-1 elemen , A[2], A[3], ...., A[N] dan tukar posisi A[LOC]
dengan A[2]. A[1] , A[2] terurut, jika dan hanya jika A[1] £ A[2].
Proses 3 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
terdiri dari N-2 elemen, A[3], A[4],......, A[N] dan tukar posisi A[LOC]
dengan A[3]. A[1], A[2], A[3] terurut, jika dan hanya jika A[2] £ A[3].
Dst.................
Contoh ;
K = 1 ; LOC = 4 77 33 44 11 88 22 66 55
K = 2 ; LOC = 6 11 33 44 77 88 22 66 55
K = 3 ; LOC = 6 11 22 44 77 88 33 66 55
K = 4 ; LOC = 6 11 22 33 77 88 44 66 55
K = 5 ; LOC = 8 11 22 33 44 88 77 66 55
K = 6 ; LOC = 7 11 22 33 44 55 77 66 88
K = 7 ; LOC = 7 11 22 33 44 55 66 77 88
Urutan : 11 22 33 44 55 66 77 88
Algoritma :
c. Merging
Misal A merupakan himpunan data terurut dengan r buah elemen dan B himpunan data terurut
dengan s buah elemen. Proses yang menggabungkan elemen-elemen dalam A dan B menjadi
himpunan elemen data terurut tunggal, misal C dengan n = r + s buah elemen disebut dengan
proses Merging.
Secara singkat, proses Merging dapat dijelaskan sebagai berikut ; ambil elemen pertama dari A,
A[1] dan B, B[1]. Bandingkan kedua elemen tersebut. Jika A[1] > B[1], B[1] dimasukkan dalam
C, jika tidak A[1] dimasukkan dalam C. Untuk himpunan data yang elemennya dimasukkan dalam
C, elemen yang akan dibandingkan adalah elemen berikutnya. Dan seterusnya.
Contoh :
A = 11 12 23 33 45 67
B=9 12 21 42
Disini A[1] = 11 dan B[1] = 9 dibandingkan dan A[1] > B[1], B[1] dimasukkan dalam C.
Pembandingan berikutnya A[1] = 11 dibandingkan dengan B[2] = 12, A[1] dimasukkan dalam C,
dan begitu seterusnya.
Algoritma MERGING :
1. NA = 1 ; NB = 1 dan PTR = 1
2. Repeat While NA £ R and NB £ S
If A[NA] < B[NB] then
a. C[PTR] = A[NA]
b. PTR = PTR + 1 ; NA = NA + 1
Else
a. C[PTR] = B[NB]
b. PTR = PTR + 1 ; NB = NB + 1
[End If Structure]
[End Loop]
Kompleksitas algoritma Merging = O(n). Dengan kata lain algoritma Merging dapat dijalankan
dalam waktu yang linear.
d. Merge Sort
Misal : Array A dangan n elemen A[1], A[2], ....., A[N] dalam memori. Algoritma Merge Sort
yang akan mengurutkan A akan digambarkan sebagai berikut :
Contoh :
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 sbb :
15 12 45 56 13 10
12 15 45 56 1013
12 15 45 56 10 13
10 12 13 15 45 56
7
2
Asumsikan bahwa data tersebut akan diurutkan secara ascending, sehingga elemen terkecil pada
masing-masing pasangan di atas adalah 2 dan 6.
6 6
25
7 2
2
2 adalah elemen terkecil dan merupakan elemen pertama pada output dari urutan yang diurutkan.
6 6
25
2 2
7 2
2
Proses yang berikutnya akan ditentukan elemen kedua dalam list terurut. 2 tidak diikutsertakan
kembali.
6 6
25
6 2, 6
7 7
*
Proses selanjutnya :
6 6
25
6 2, 6
7 7
14
22 14
14
Apabila 3 diikutkan dalam proses, maka urutan list terurut pada output akan berantakan. Untuk
mengatasinya, terdapat aturan sbb :
If Keynew < Keylastout
then keynew diletakkan dalam tree tetapi untuk sementara waktu di-
diskualifikasikan.
Catatan : Keylastout adalah key terakhir yang ada dalam list terurut.
Elemen yang didiskualifikasikan akan ditandai dengan asterisk (*). Sehingga hasil dari proses
enam adalah :
*3 25
25
14 2, 6, 7, 9, 10, 14
22 14
14
*12
*8
Sekarang semua elemen yang ada adalah elemen yang didiskualifikasikan. Dan saat ini baru 9
elemen yang diurutkan. Sekarang elemen yang untuk sementara didiskualifikasikan, dilepaskan
dari diskualifikasi dan proses dimulai kembali. Kali ini akan terbentuk list terurut kedua dari
elemen-elemen yang didiskualifikasi sebelumnya. Sehingga proses 10 :
3 1
1
1 2, 6, 7, 9, 10, 14, 14, 22, 25
12 8 1
8
Proses 11, elemen 30 :
3 3
1, 3, 8, 12, 13, 30
Kedua himpunan data yang terurut tersebut dapat digabungkan menjadi satu list data terurut
dengan menggunakan algoritma Merging.
f. Shell Sort
Disebut juga dengan metoda pertambahan menurun (diminishing increment). Metoda ini
dikembangkan oleh Donald L. Shell tahun 1959. Metoda ini memanfaatkan penukaran sepasang
elemen untuk mencapai keadaan urut. Dalam hal ini jarak dua elemen yang dibandingkan dan
ditukarkan tertentu.
Pada langkah pertama, ambil elemen pertama dan kita bandingkan dengan elemen pada jarak
tertentu dari elemen pertama tersebut. Kemudian elemen kedua dibandingkan dengan elemen lain
dengan jarak yang sama. Demikian seterusnya sampai seluruh elemen dibandingkan.
Pada contoh berikut, proses pertama kali jarak diambil separoh banyaknya elemen yang akan
diurutkan. Proses kedua jaraknya diambil separuh jarak yang pertama, dst....
Proses pengurutan menggunakan metoda Shell ada pada Tabel 10.3. Dalam hal ini elemen yang
ditulis miring adalah elemen yang dibandingkan dan kemudian ditukar, jika perlu.
Jarak A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
Awal 23 45 12 24 56 34 27 23 16
Jarak = 4 23 45 12 24 56 34 27 23 16
23 45 12 24 56 34 27 23 16
23 34 12 24 56 45 27 23 16
23 34 12 24 56 45 27 23 16
23 34 12 23 56 45 27 24 16
23 34 12 23 16 45 27 24 56
Jarak = 2 23 34 12 23 16 45 27 24 56
12 34 23 23 16 45 27 24 56
12 23 23 34 16 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 24 27 45 56
12 23 16 34 23 24 27 45 56
Jarak = 1 12 23 16 34 23 24 27 45 56
12 23 16 34 23 24 27 45 56
12 16 23 34 23 24 27 45 56
12 16 23 34 23 24 27 45 56
12 16 23 23 34 24 27 45 56
12 16 23 23 24 34 27 45 56
12 16 23 23 24 27 34 45 56
12 16 23 23 24 27 34 45 56
12 16 23 23 24 27 34 45 56
Akhir 12 16 23 23 24 27 34 45 56
10.2.2 Searching
Proses pencarian ditujukan untuk menemukan harga/data tertentu didalam sekumpulan harga yang
bertipe sama. Dalam proses pemrograman serching/pencarian biasanya digunakan untuk :
- proses update atau penghapusan data sebelumnya melakukan proses pencarian data.
- Penyisipan data pada sekumpulan data, jika data sudah ada maka proses penyisipan
tidak diperkenankan. Jika data tidak ada maka proses penyisipan dilakukan tujuan
digunakan agar tidak terjadi duplikasi data
a. Pencarian Sequential
Merupakan algoritma pencarian yang sangat sederhana, proses pencarian beruntun adalah proses
membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama
sampai elemen yang dicari ditemukan dan seluruh elemen sudah diperiksa.
13 16 14 21 76 21
81 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 4 5 6 7 8
Low Middle High
Langkah 2:
Larik[4] = X ? (18 = 18) true X ditemukan, pencarian dihentikan.
Langkah 2:
Larik[4] = X ? (18 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan.
Jika Larik[4] > 16 ?, (18 > 16) TRUE, lakukan pencarian disebelah kanan dengan Low = middle+1
4+1 = 5 dan High = 8, Tetap.
16 13 10 7
5 6 7 8
low High
ITERASI 2
Langkah 1:
Low = 5 dan High=8
Elemen tengah Middle = (5+8) div 2 = 13 div 2 = 6
16 13 10 7
5 6 7 8
low middle High
Langkah 2:
Larik[6] = X ? (13 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan.
Jika Larik[6] > 16 ?, (13 > 16) FALSE, lakukan pencarian disebelah KIRI dengan Low = 5 (TETAP) dan
High = middle-1 = 5
16
5
Low/high
ITERASI 3
Langkah 1:
Low = 5 dan High=5
Elemen tengah Middle = (5+5) div 2 = 10 div 2 = 5
16
5
middle
Langkah 2:
Larik[5] = X ? (16 = 16) TRUE (X ditemukan , pencarian dihentikan)
Layar 1 :
Masukkan 10 data
==========
Data ke-1 = 5 Data ke-6 = 45
Data ke-2 = 2 Data ke-7 = 8
Data ke-3 = 67 Data ke-8 = 23
Data ke-4 = 43 Data ke-9 = 39
Data ke-5 = 90 Data ke-10 = 7
{ket : tampilan ketika mengiput 10 angka}
Layar 2 :
5 2 67 43 90 45 8 23 39 7
Kasus 2
Output:
1. Pada layar komputer ditampilkan nilai dari 100 elemen array yang bertipe integer serta
nilai bersifat acak dan berkisar di antara 1 dan 1000.
2. Kemudian pada layar komputer ditampilkan pesan yang meminta operator memasukkan
nilai yang dicari.
3. Jika nilai yang dimaksud tidak ditemukan, pada layar komputer akan ditampilkan pesan
'Nilai tidak ditemukan'. Jika nilai tersebut berhasil ditemukan, pada layar komputer akan
ditampilkan pesan 'Nilai ditemukan pada elemen ke X', dengan X adalah indeks elemen
array tempat tersimpannya array tersebut.
Input:
1. Array bertipe integer yang terdiri dari 100 elemen.
2. Nilai yang dimasukkan oleh operator untuk dicari di dalam array.
10.4.2 Soal-Soal
1) Jelaskan pengertian Search dan Sorting, beserta jenis-jenis dari Search dan Sorting.
2) Jelaskan bagaimana proses pencarian data menggunakan metode Bubble/Exchange Sort, Selection
Sort, Shell Sort, Quick Sort.
3) Apa yang dimaksud dengan Binary Search serta bagaimana algoritmanya?
10.5 Kesimpulan
Dari algoritma-algoritma yang sudah kita pelajari di atas, semua algoritma stabil kecuali Quick
Sort. Ketika menggunakan Quick Sort, kita tidak bisa menentukan urutan relatif dari elemen-
elemen yang seri.
Berikut ini adalah tabel perbandingan algoritma-algoritma sort yang sudah kita pelajari:
Running
Algoritma Stabil Catatan
time
Selection
Ya O(N2) Running time tidak tergantung input
Sort
Insertion
Ya O(N2) Jika input hampir terurut, running time menjadi sangat cepat
Sort
Bubble Sort Ya O(N2) Lambat dibandingkan algoritma O(N2) lainnya
O(N log
Merge Sort Ya Running time tidak tergantung input
N)
Paling cepat dibandingkan algoritma O(N log N) lainnya, tetapi
O(N log pada kasus terburuk (sangat jarang terjadi) menjadi O(N2).
Quick Sort Tidak
N) Algoritma ini adalah algoritma yang paling populer digunakan di
kompetisi informatika.
Sedang yang terkait dengan masalah pencarian, keunggulan metode pencarian biner adalah bahwa
kecepatan pencarian hanya berkurang secara logaritmik dibanding bertambahnya data. Jumlah
pembandingan dalam proses pencarian biner adalah 2log (N), dengan N adalah jumlah data dalam
kumpulan nilai. Misalnya jumlah pembandingan pada proses pencarian biner yang datanya
berjumlah 64 (26) adalah 2log 64 = 2log 26 = 6 kali dan untuk data sebanyak 65536 (216), jumlah
pembandingan adalah 16 kali. Dengan demikian, jika jumlah data meningkat sebanyak lebih dari
1000 kali lipat (dari 64 menjadi 65536), maka jumlah pembandingan hanya naik sebanyak 16/6
kali atau kurang dari 3 kali lipat. Atau dengan kata lain, peningkatan jumlah data lebih dari 1000
kali lipat hanya akan diikuti dengan penurunan kecepatan pencarian sebanyak kurang dari 3 kali
lipat. Karena itu, sebagaimana yang telah kita singgung dalam Modul Kuliah 2, proses pengurutan
(sorting) adalah hal yang sangat penting untuk dilakukan terhadap sekumpulan data, mengingat
bahwa data yang sudah terurut bisa memanfaatkan keampuhan dari metode binary search.
Pengurutan & Pencarian Data 121