SEARCHING
B. Uraian Materi
Pencarian merupakan proses yang mendasar di dalam pemrograman. Pencarian
(Searching) merupakan tindakan untuk mendapatkan suatu data dalam kumpulan
data berdasarkan satu kunci (key) atau acuan data. Dalam kehidupan sehari-hari,
seringkali kita berurusan dengan pencarian; misalnya untuk menemukan nomor
telepon seseorang pada buku telepon atau mencari istilah dalam kamus, dan masih
banyak lagi. Pada aplikasi komputer, pencarian kerapkali dilakukan. Misalnya
untuk proses penghapusan data/record atau mengubah data/record tertentu di dalam
suatu tabel atau file, langkah pertama yang harus dilakukan adalah mencari apakah
data tersebut terdapat di dalam tabel/file atau tidak. Jika ada maka dapat dihapus
atau diubah.
Kegunaan beberapa struktur data dalam hubungannya untuk menyimpan data
sehingga memudahkan proses pencarian kembali tergantung pada:
1. Media penyimpanan data (memori, disk, tape).
2. Karakteristik jenis data yang disimpan (data numerik/character/string).
3. Jumlah data yang akan disimpan dan keperluan untuk akses data secepat-
cepatnya.
Contoh struktur data yang dipakai untuk proses penyimpanan data selanjutnya
untuk proses pencarian yaitu: array, list, dan pohon biner. Di dalam pembahasan ini
hanya membahas pencarian data pada array.
4
Terdapat bermacam-macam persoalan pencarian dalam array. Pertama: dari
sekumpulan data akan dilakukan pencarian data X, maka hasil pencarian hanya
menampilkan suatu pesan “X ditemukan” atau “X tidak ditemukan”. Kedua: dari
sekumpulan data akan dilakukan pencarian data X, andaikan data X ditemukan di
posisi n dalam array maka hasil pencarian akan menampilkan “X ditemukan pada
posisi n” dan jika data X tidak ditemukan maka hasil pencarian akan menampilkan
“data X tidak ditemukan”. Ketiga: dari sekumpulan data akan dilakukan pencarian
data X, ternyata data X terdapat lebih dari satu maka muncul pertanyaan “data yang
mana yang akan ditampilkan? Apakah data yang pertama kali yang ditampilkan
atau seluruh data yang ditemukan yang ditampilkan?”. Dari ketiga persoalan di atas
dapat dilakukan, tergantung kebutuhan masing-masing.
Pencarian dapat dilakukan berdasarkan tempat penyimpanan, yang dibagi atas
dua, yaitu pencarian internal dan pencarian eksternal. Pencarian internal yaitu
pencarian yang dilakukan terhadap data yang berada dalam memori komputer.
Pencarian eksternal yaitu pencarian yang dilakukan terhadap data yang berada
dalam memori eksternal. Di dalam pembahasan ini hanya membahas tentang
pencarian internal.
Pada umumnya dikenal tiga metode searching, antara lain: Sequensial Search,
Binary Search, dan Interpolation Search.
1. Sequential Search
Sequential Search merupakan proses pencarian data dengan metode
pencarian langsung. Ini dilakukan dengan cara mencocokkan data yang akan
dicari dengan semua data yang ada dalam kelompok data. Proses pencocokan
data dilakukan secara berurutan. Satu demi satu dimulai dari data ke1 hingga
data pada urutan terakhir. Metode ini merupakan metode pencarian yang paling
mudah. Dalam konsep array, pencarian beruntun membandingkan setiap
elemen array satu per satu secara beruntun yang dimulai dari elemen pertama
hingga elemen yang dicari ditemukan atau hingga elemen terakhir dari array.
Pencarian beruntun dapat dilakukan terhadap elemen array yang belum terurut
atau terhadap elemen array yang terurut. Perbedaan dari keduanya terletak pada
efisiensi operasi pembandingan yang dilakukan.
5
Dengan kata lain sequential search akan mencari data dengan cara
membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja
akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah
banyak. Metode ini disarankan untuk digunakan pada data yang sedikit saja.
Berikut adalah contohnya secara manual:
6
int SequentialSearch(int x)
{
int i = 0;
bool ketemu = false;
while ((!ketemu) && (i <>
if(Data[i] == x)
ketemu = true;
else
i++;
}
if(ketemu) return i;
else
return -1;
}
7
#include<iostream>
#include<conio.h>
using namespace std;
main()
{
int Nilai[20];
int i, N, Bilangan;
bool ketemu;
//Melakukan Pencarian
i=0;
do
{
if(Nilai[i]==Bilangan)
ketemu = true;
i++;
}
while(!(ketemu));
if(ketemu)
cout<<"Bilangan "<<Bilangan<<" ditemukan";
else
cout<<"Bilangan "<<Bilangan<<" tidak ditemukan";
getch();
}
8
2) Penyelesaian kasus kedua
#include<iostream>
#include<conio.h>
using namespace std;
main()
{
int Nilai[20];
int Posisi[20];
int i, N, Bilangan, Banyak=0;
bool ketemu;
//Melakukan Pencarian
for(i=0; i<N; i++)
{
if(Nilai[i]==Bilangan)
{
ketemu = true;
Posisi[Banyak]=i;
Banyak++;
}
}
if(ketemu)
{
cout<<"Bilangan "<<Bilangan<<" ditemukan sebanyak "<<Banyak;
cout<<"\npada posisi ke = ";
for(i=0; i<Banyak; i++)
cout<<Posisi[i]<<" ";
}
else
cout<<"Bilangan "<<Bilangan<<" tidak ditemukan";
getch();
}
9
Misalkan kita memiliki suatu array yang berisi 8 elemen seperti di atas, dimana
variabel yang digunakan adalah:
a) Nilai : Variabel array sekumpulan bilangan
b) Posisi : Variabel array yang menampung indeks dari bilangan yang dicari
c) Bilangan : Bilangan yang akan dicari
d) Banyak : Banyaknya bilangan yang dicari di dalam nilai
10
Karena tidak sama maka tidak ada perubahan dan dilanjutkan ke proses
perulangan keempat dengan menaikkan harga i=4(i++).
11
Karena tidak sama maka tidak ada perubahan dan karena isi array telah semua
dibandingkan maka proses pencarian berhenti.
Maka dari proses di atas dapat kita lihat keluaran dari program adalah “Data 15
ada ditemukan sebanyak 2 yang ada pada posisi 1 dan 6”.
Sequential Searching memiliki Kelebihan dan Kekurangan yaitu:
1) Kelebihan Sequential Searching bisa dikatakan lebih mudah dalam
implementasinya dalam pemrograman.
2) Kekurangannya jika data yang terdapat dalam suatu array itu sangat
banyak, maka akan diperlukan waktu yang lebih lama untuk
membandingkan data yang dicari dengan jumlah data yang sangat banyak
dalam suatu array.
2. Binary Search
Binary Search adalah sebuah teknik untuk menemukan nilai tertentu
dalam sebuah larik (array) linear, dengan menghilangkan setengah data pada
setiap langkah, dipakai secara luas tetapi tidak secara ekslusif dalam ilmu
komputer. Sebuah pencarian biner mencari nilai tengah (median), melakukan
sebuah pembandingan untuk menentukan apakah nilai yang dicari ada sebelum
atau sesudahnya, kemudian mencari setengah sisanya dengan cara yang sama.
Sebuah pencarian biner adalah salah satu contoh dari algoritma divide and
conquer .
Penerapan terbanyak dari binary search adalah untuk mencari sebuah
nilai tertentu dalam sebuah list terurut. Jika dibayangkan, pencarian biner dapat
dilihat sebagai sebuah permainan tebak-tebakan, kita menebak sebuah
bilangan, atau nomor tempat, dari daftar (list) nilai.
Pencarian diawali dengan memeriksa nilai yang ada pada posisi tengah
list; oleh karena nilai-nilainya terurut, kita mengetahui apakah nilai terletak
12
sebelum atau sesudah nilai yang di tengah tersebut, dan pencarian selanjutnya
dilakukan terhadap setengah bagian dengan cara yang sama.
if(ketemu)
return m;
else
return -1;
}
Binary search adalah metode pencarian suatu data atau elemen di dalam
suatu array dengan kondisi data dalam keadaan terurut. Proses pencarian binary
search hanya dapat dilakukan pada kumpulan data yang sudah diurutkan
terlebih dahulu (menaik atau menurun). Prinsip dari binary search terhadap N
elemen dapat dijelaskan seperti berikut:
1) Tentukan posisi awal = 0 dan posisi akhir = N-1.
2) Hitung posisi tengah = (posisi awal + posisi akhir)/2.
3) Bandingkan data yang dicari dengan elemen posisi tengah.
13
Misalkan kita mempunyai sederetan data dalam array nilai sebanyak 10
elemen dan akan dilakukan pencarian data 87 terhadap array.
Nilai[0,9] = 12, 45, 23, 87, 90, 55, 15, 25, 40, 21
Urutkan elemen array secara menaik, sehingga diperoleh:
Nilai[0,9] = 12, 15, 21, 23, 25, 40, 45, 55, 87, 90
Data yang akan dicari = 87 (Bilangan)
Tentukan nilai awal=0, akhir=N-1=9
Hitung tengah =(9+0)/2=4
Bandingkan Bilangan < Nilai[tengah] → 87=25→false
Bandingkan Bilangan < Nilai[tengah] → 87<25→false
Bandingkan Bilangan < Nilai[tengah] → 87>25→true maka pencarian
dilakukan ke sebelah kanan dengan nilai awal = tengah + 1 = 5
Karena awal masih lebih kecil dari akhir maka ulangi kembali mulai
menghitung tengah.
Karena awal masih lebih kecil dari akhir maka ulangi kembali mulai
menghitung tengah
14
#include<stdio.h>
#include<iostream>
#include<conio.h>
#include<iomanip>
using namespace std;
main(){
//Deklarasi Variabel
int Nilai[20];
int i, j, N;
int temp, awal, akhir, tengah, Bilangan;
15
Kelebihan dan Kekurangan Binary Search:
1) Kelebihannya yaitu tidak perlu membandingkan data yang dicari
dengan seluruh data array yang ada, cukup melalui titik tengah
kemudian kita bisa menentukan ke mana selanjutnya mencari data
yang ingin dicari.
2) Kekurangan implementasi agak sedikit lebih rumit karena tidak bisa
digunakan pada data array yang masih acak. Jadi harus melakukan
sorting terlebih dahulu dalam implementasinya.
3. Interpolation Search
Proses pencarian data ini hampir sama dengan proses pencarian binary
search. Pencarian ini juga dilakukan pada kumpulan data yang sudah urut
(menaik atau menurun). Akan tetapi jika pada binary search kita membagi
data dengan (akhir+awal)/2 tiap prosesnya, maka pada interpolation search
kita akan membagi data menurut rumus sebagai berikut:
Posisi = (kunci – data[low]/data[high] – data[low]) * (high – low) + low
Maka dengan menggunakan rumus di atas diperoleh program lengkap seperti
program berikut.
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<iomanip>
using namespace std;
main(){
//deklarasi variable
int Nilai[20];
int i,j,Bilangan,N;
int temp,awal,akhir,tengah;
//proses penginputan data
cout<<"Banyak Data : ";
cin>>N;
for(i=0; i<N; i++){
cout<<"elemen ke-"<<i<<" : ";
cin>>Nilai[i];
}
16
cout<<"\nData sebelum diurut : ";
for(i=0; i<N; i++)
cout<<setw(3)<<Nilai[i];
17
C. Rangkuman
1) Pada umumnya dikenal tiga metode searching, antara lain: Sequensial Search,
Binary Search, dan Interpolation Search;
3) Binary search adalah metode pencarian suatu data atau elemen di dalam suatu
array dengan kondisi data dalam keadaan terurut;
4) Proses pencarian data ini hampir sama dengan proses pencarian binary search
yang dilakukan pada kumpulan data yang sudah urut.
18