Sunteți pe pagina 1din 3

struktur data : searching

Struktur Data : Searching


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
memori(pencarian internal), bisa juga pada file pada external storage(pencarian
external).
Ada 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 serach dan interpolation search). Pada Kesempatan ini
kita hanya akan membahas tentang pencarian internal menggunakan Array dinamis
(pointer).
Berikut adalah metode-metode yang digunakan dalam Searching
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 :
#include <iostream>
using namespace std;
main()
{
int data[8] = {8,10,6,-2,11,7,1,100};
int cari;
int tanda=0;
cout<<"masukkan data yang ingin dicari = "; cin>>cari;
for(int i=0;i<8;i++)
{
if(data[i] == cari) tanda=1;
}
if(tanda==1) cout<<"Data ada!\n";
else cout<<"Data tidak ada!\n";
};
Hasilnya

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 data sama, berarti ketemu.
Contoh Program:
#include<iostream>
using namespace std;
int main () {
int n, angka[12], kiri, kanan, tengah, temp, key;
bool ketemu = false;
cout<<"Masukan jumlah data : ";
cin>>n;
for(int i=0; i<n; i++)
{
cout<<"Angka ke - ["<<i<<"] : ";
cin>>angka[i];
}
for (int i=0; i<n; i++)
{
for(int j=0; j< n-i-1; j++)
{
if(angka [j] > angka [j+1])
{
temp=angka[j];
angka[j]=angka[j+1];
angka[j+1]=temp;
}

}
}
cout<<"Data yang telah diurutkan adalah : ";
for(int i=0; i<n; i++)
{
cout<<angka[i]<<" ";
}
cout<<"\n Masukan angka yang dicari : ";
cin>>key;
kiri=0;
kanan=n-1;
while(kiri<=kanan)
{
tengah=(kiri + kanan)/2;
if(key == angka[tengah])
{
ketemu=true;
break;
}
else if (key < angka [tengah])
{
kanan = tengah -1;
}
else
{
kiri = tengah +1;
}
}
if (ketemu == true)
cout<<"Angka ditemukan!";
else
cout<<"Angka tidak ditemukan";
return 0;
};
hasilnya :

S-ar putea să vă placă și