Mata Kuliah : Struktur Data
Program Studi : Manajemen Informatika
Minggu ke : 12
SEARCHING
ď‚· PENGERTIAN
Pada suatu data, seringkali dibutuhkan pembacaan kembali informasi (retrieval information) dengan
cara searching. Searching adalah pencarian data dengan cara menelusuri data-data tersebut. Tempat
pencarian data dapat berupa array dalam memory (pencarian internal), bisa juga pada file external
storage (pencarian eksternal).
ď‚· TEKNIK PENCARIAN
Ada 2 (dua) macam teknik pencarian yaitu pencarian sekuensial dan pencarian biner. Perbedaan dari
dua teknik ini terletak pada keadaan data. pencarian sekuensial digunakan apabila data dalam keadaan
acak atau tidak terurut (contoh : sequential search). Sebaliknya, pencarian biner digunakan pada data
yang sudah dalam keadaan urut (contoh : binary search dan interpolation search).
1. SEQUENTIAL SEARCH (PENCARIAN BERURUTAN)
Adalah suatu teknik pencarian data dalam array (1 dimensi) yang akan menelusuri semua elemen-
elemen array dari awal sampai akhir, dimana data-data tidak perlu diurutkan terlebih dahulu.
Pencarian berurutan menggunakan prinsip sebagai berikut :
Data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data
tersebut ditemukan atau tidak ditemukan.
Contoh Program Pencarian Berurutan :
#include <iostream.h>
main()
{
int data[8] = {8,10,6,-2,11,7,1,100};
int cari;
int flag=0;
cout<<"Masukkan Data Yang Ingin Dicari : ";cin>>cari;
for(int i=0;i<8;i++)
{
if(data[i]==cari) flag=1;
}
if(flag==1)
cout<<"DATA ADA !"<<endl;
else
cout<<"DATA TIDAK ADA !"<<endl;
}
Mata Kuliah : Struktur Data
Program Studi : Manajemen Informatika
Minggu ke : 12
2. BINARY SEARCH
Salah satu syarat agar binary search dapat dilakukan adalah data sudah dalam keadaan urut.
Dengan kata lain, apabila data belum dalam keadaan urut, binary search tidak dapat dilakukan.
Prinsip dari binary search dapat dijelaskan sebagai berikut :
a. Mula-mula diambil posisi awal 0 dan posisi akhir = N – 1, kemudian dicari posisi data tengah
dengan rumus (posisi awal + posisi akhir) / 2. Kemudian data yang dicari dibandingkan dengan
data tengah.
b. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi
tengah – 1.
c. Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi
tengah + 1. Jika sama berarti data ketemu.
Contoh Program Binary Search :
#include <iostream.h>
main()
{
int data[7]={10,13,17,34,58,67,99};
int left, right, middle, cari;
int N = 7, flag=0;
left=0, right=N-1;
cout<<"Masukkan Data Yang Ingin Di Cari : ";cin>>cari;
cout<<"nn";
while(left<=right&&flag==0)
{
middle=(left+right)/2;
cout<<"DATA TENGAH = "<<middle<<endl;
if(data[middle]==cari) flag=1;
else if(cari<data[middle])
{
cout<<"Cari Data Di Kiri"<<endl;
right=middle-1;
}
else
{
left=middle+1;
cout<<"Cari Data Di Kanan"<<endl;
}
if(flag==1)
cout<<"DATA ADAn"<<endl;
else
cout<<"DATA TIDAK ADAn"<<endl;
} }
Mata Kuliah : Struktur Data
Program Studi : Manajemen Informatika
Minggu ke : 12
3. INTERPOLATION SEARCH
Teknik ini dilakukan pada data yang sudah terurut berdasarkan kunci tertentu. Teknik searching
ini dilakukan dengan perkiraan letak data. contoh ilustrasi :
Jika kita hendak mencari suatu kata di dalam kamus telepon, misal yang berawalan dengan huruf
J, maka kita tidak akan mencarinya dari awa buku, tapi kita langsung membukanya pada 1/3 atau
1/4 dari tbal kamus.
Posisi relatif kunci pencarian dihitung dengan rumus :
Posisi =
[ ]
[ ] [ ]
( )
a. Jika data[posisi] > data yang dicari, high = pos – 1
b. Jika data[posisi] < data yang dicari, low = pos + 1
Contoh Program Interpolation Search :
#include <iostream.h>
#include <math.h>
main()
{
int data[7]={10,13,17,34,58,67,99};
int low,high,cari,posisi;
float posisi1;
int N=7, flag=0;
low=0, high=N-1;
cout<<"nnMasukkan Data Yang Ingin Dicari : ";cin>>cari;
do
{
posisi1 = (cari-data[low])/(data[high]-data[low])*(high-low)+low;
posisi = floor(posisi1);
if(data[posisi]==cari)
{
flag=1;
break;
}
if(data[posisi]>cari)
{
high=posisi-1;
}
else
if(data[posisi]<cari)
{
low=posisi+1;
}
}
while(cari>=data[low]&&cari<=data[high]);
if(flag==1)
Mata Kuliah : Struktur Data
Program Studi : Manajemen Informatika
Minggu ke : 12
{
cout<<"n DATA DITEMUKAN"<<endl;
}
else
{
cout<<"n DATA TIDAK DITEMUKAN"<<endl;
} }

Struktur data pertemuan 12

  • 1.
    Mata Kuliah :Struktur Data Program Studi : Manajemen Informatika Minggu ke : 12 SEARCHING ď‚· PENGERTIAN Pada suatu data, seringkali dibutuhkan pembacaan kembali informasi (retrieval information) dengan cara searching. Searching adalah pencarian data dengan cara menelusuri data-data tersebut. Tempat pencarian data dapat berupa array dalam memory (pencarian internal), bisa juga pada file external storage (pencarian eksternal). ď‚· TEKNIK PENCARIAN Ada 2 (dua) macam teknik pencarian yaitu pencarian sekuensial dan pencarian biner. Perbedaan dari dua teknik ini terletak pada keadaan data. pencarian sekuensial digunakan apabila data dalam keadaan acak atau tidak terurut (contoh : sequential search). Sebaliknya, pencarian biner digunakan pada data yang sudah dalam keadaan urut (contoh : binary search dan interpolation search). 1. SEQUENTIAL SEARCH (PENCARIAN BERURUTAN) Adalah suatu teknik pencarian data dalam array (1 dimensi) yang akan menelusuri semua elemen- elemen array dari awal sampai akhir, dimana data-data tidak perlu diurutkan terlebih dahulu. Pencarian berurutan menggunakan prinsip sebagai berikut : Data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan. Contoh Program Pencarian Berurutan : #include <iostream.h> main() { int data[8] = {8,10,6,-2,11,7,1,100}; int cari; int flag=0; cout<<"Masukkan Data Yang Ingin Dicari : ";cin>>cari; for(int i=0;i<8;i++) { if(data[i]==cari) flag=1; } if(flag==1) cout<<"DATA ADA !"<<endl; else cout<<"DATA TIDAK ADA !"<<endl; }
  • 2.
    Mata Kuliah :Struktur Data Program Studi : Manajemen Informatika Minggu ke : 12 2. BINARY SEARCH Salah satu syarat agar binary search dapat dilakukan adalah data sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, binary search tidak dapat dilakukan. Prinsip dari binary search dapat dijelaskan sebagai berikut : a. Mula-mula diambil posisi awal 0 dan posisi akhir = N – 1, kemudian dicari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2. Kemudian data yang dicari dibandingkan dengan data tengah. b. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah – 1. c. Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1. Jika sama berarti data ketemu. Contoh Program Binary Search : #include <iostream.h> main() { int data[7]={10,13,17,34,58,67,99}; int left, right, middle, cari; int N = 7, flag=0; left=0, right=N-1; cout<<"Masukkan Data Yang Ingin Di Cari : ";cin>>cari; cout<<"nn"; while(left<=right&&flag==0) { middle=(left+right)/2; cout<<"DATA TENGAH = "<<middle<<endl; if(data[middle]==cari) flag=1; else if(cari<data[middle]) { cout<<"Cari Data Di Kiri"<<endl; right=middle-1; } else { left=middle+1; cout<<"Cari Data Di Kanan"<<endl; } if(flag==1) cout<<"DATA ADAn"<<endl; else cout<<"DATA TIDAK ADAn"<<endl; } }
  • 3.
    Mata Kuliah :Struktur Data Program Studi : Manajemen Informatika Minggu ke : 12 3. INTERPOLATION SEARCH Teknik ini dilakukan pada data yang sudah terurut berdasarkan kunci tertentu. Teknik searching ini dilakukan dengan perkiraan letak data. contoh ilustrasi : Jika kita hendak mencari suatu kata di dalam kamus telepon, misal yang berawalan dengan huruf J, maka kita tidak akan mencarinya dari awa buku, tapi kita langsung membukanya pada 1/3 atau 1/4 dari tbal kamus. Posisi relatif kunci pencarian dihitung dengan rumus : Posisi = [ ] [ ] [ ] ( ) a. Jika data[posisi] > data yang dicari, high = pos – 1 b. Jika data[posisi] < data yang dicari, low = pos + 1 Contoh Program Interpolation Search : #include <iostream.h> #include <math.h> main() { int data[7]={10,13,17,34,58,67,99}; int low,high,cari,posisi; float posisi1; int N=7, flag=0; low=0, high=N-1; cout<<"nnMasukkan Data Yang Ingin Dicari : ";cin>>cari; do { posisi1 = (cari-data[low])/(data[high]-data[low])*(high-low)+low; posisi = floor(posisi1); if(data[posisi]==cari) { flag=1; break; } if(data[posisi]>cari) { high=posisi-1; } else if(data[posisi]<cari) { low=posisi+1; } } while(cari>=data[low]&&cari<=data[high]); if(flag==1)
  • 4.
    Mata Kuliah :Struktur Data Program Studi : Manajemen Informatika Minggu ke : 12 { cout<<"n DATA DITEMUKAN"<<endl; } else { cout<<"n DATA TIDAK DITEMUKAN"<<endl; } }