Algoritma dan Struktur Data - Sorting beserta Metode nya
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;
} }