Searching
- Searching adalah metode pencarian informasi . searching digunakan untuk pencarian informasi khusus dari table pada saat lokasi yang pasti dari informasi tersebut sebelumnya tidak di ketahui. Pencarian selalu dinyatakan dengan referensi pada adanya sekelompok data tersebut .
Ada dua Teknik searching yaitu sequential search dan binary
search.
- Sequential search
Pencarian
Sequential search pada dasarnya hanya melakukan pengulangan dari 1 samapai
dengan jumlah data. Pada setiap perulangan dibandingkan data ke-I dengan data
yang dicari.. apabiala sama berarti data telah ditemuakan, dan sebaliknya
apabila samapai akhir pengulanagn tidak ada data yang sama berarti data
tersebut tidak ada.
Prinsip sequential search, data yang dibandingkan satu
persatu secara berurutan dengan data yang dicari.
Contoh program
PROGRAM 1
#include<iostream.h>
#include<conio.h>
void main()
{
//deklarasi variabel
int a[10],index[10], i,j,k;
//proses penginputan data
for(i=1;i<=10;i++)
{
cout<<"Data ke ["<<i<<"] = ";
cin>>a[i];
}
//memasukkan data yang akan dicari ke dalam K
cout<<endl;
cout<<"Masukkan data yang akan anda cari = ";
cin>>k;
cout<<endl;
//proses pencarian data
j=0;
for (i=1;i<=10;i++)
{
if(a[i]==k)
{
index[j]=i;
j++;
}
}
//jika data ditemukan dalam array
if (j>0)
{
cout<<"Data "<<k<<" yang dicari ada "<<j<<" buah"<<endl;
cout<<endl;
cout<<"Data tersebut terdapat dalam index ke : ";
for(i=0;i<j;i++)
{
cout<<" "<<index[i];
}
cout<<endl;
cout<<endl;
}
//jika tidak ditemukan
else
{
cout<<"Data tidak ditemukan dalam array"<<endl;
}
getch();
}
PROGRAM 2
#include <conio.h>
#include <iostream.h>
main(){
int c,i,posisi;
int A[20]={2,4,6,8,10,12,14,16,18,20,31,33,35,37,39,41,43,45,47,49};
cout<<"Data : ";
for(i=0;i<20;i++){
cout<<A[i]<<" ";
}
cout<<"\nData yang ingin dicari : ";
cin>>c;
i=0;
posisi=0;
while(i<19 && A[i]!=c){
i++;
}
if (A[i]!=c){
cout<<"Maaf data yang dicari tidak ada";
}else if(posisi=i+1)
cout<<"ditemukan pada posisi ke "<<posisi;
getch();
}
- Binary search
Dalam
binary search data yang ada harus sudah terurut. Apabila data belum terurut
maka pencarian biner tidak dapat dilakukan.
Proses pencarian biner
- Dari posisi awal = 1dan posisi akhir = n
- Kemudian cari posisi data tengah dengan rumus . posisi tengah= (posisi awal + posisi akhir)div2
- Kemudian data yang dicari di bandingkan dengan data tengah.
- Jika sama maka data ditemukan dan proses selesai.
- Jika lebih kecil maka proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah.
- Jika lebih besar maka proses dilakuakn kembali tetapi posisi alwal dianggap sama dengan posisi tengah.
- Ulangi langkah tersebut hingga data ditemukan atau tidak.
- Pencarian data akan berakhir jika data ditemuakn pada posisi awal lebih beasr dari posisi akhir.
Contoh program
#include<iostream>
int main ()
{
int n, angka[12], kiri, kanan, tengah, temp, key;
bool ketemu = false;
cout<<"inputkan jumlah data yang anda inginka : ";
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 telah diurutkan : ";
for(int i=0; i<n; i++)
{
cout<<angka[i]<<" ";
}
cout<<"\n 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 diketahui!";
else
cout<<"Angka tidak diketahui";
return 0;
}
Referensi : Jamsa's 1001 C/C++ Tips
int main ()
{
int n, angka[12], kiri, kanan, tengah, temp, key;
bool ketemu = false;
cout<<"inputkan jumlah data yang anda inginka : ";
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 telah diurutkan : ";
for(int i=0; i<n; i++)
{
cout<<angka[i]<<" ";
}
cout<<"\n 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 diketahui!";
else
cout<<"Angka tidak diketahui";
return 0;
}
Referensi : Jamsa's 1001 C/C++ Tips
Tidak ada komentar:
Posting Komentar