Selamat Datang di Pratomo Wijoyo Berikan Komentar Anda untuk Kemajuan Blog ini

Senin, 07 Juni 2010

Metode Searching Binary

Setelah kemarin membahas Searching dengan sequential, sekarang kita bahas yang satunya lagi, yakni Binary Searching. Bedanya metode Sequential dan Binary adalah keadaan datanya. Jika Sequential data tidak terurut pun bisa, namun jika menggunakan Binary data harus dalam keadaan urut.

Algoritma yang digunakan pada metode Binary seperti dibawah ini :

1. User diminta menentukan banyaknya data yang akan diinputkan
2. User menginputkan data sebanyak yang telah ditentukan pada langkah pertama
3. User diminta memasukkan data yang dicari
4. Mengurutkan data jika data belum terurut
5. User diminta memasukkan data yang dicari
6. Menentukan nilai tengah array
7. Pengecekan apakah nilai array pada index tengah sama dengan data yang dicari
8. Jika sama, data yang dicari ditemukan
8.1 jika tidak, periksa apakah data yang dicari lebih kecil dari nilai tengah

8.1.1 jika true lakukan pencarian dari i=0 sampai i=nilai tengah

8.2 jika 8.1 bernilai false berarti data yang dicari lebih besar dari nilai tengah

8.2.1 lakukan pencarian mulai dari i=nilaitengah+1 sampai data terakhir

9. Tampilkan hasil pencarian


/*
* Searching by HellKnight
* Metode Binary Search
*/

#include <iostream.h>
#include <conio.h>

main(){
int i, n, j, tengah, elmtengah, temp, dt, posisi, ketemu=0;
int data[50];

cout<<"Masukkan banyaknya data :";cin>>n;

//input data
for(i=0; i<n; i++){
cout<<"Masukkan data ke - "<<(i+1)<<" ";
cin>>data[i];
}
cout<<endl;

//Pengurutan naik dengan Insertion sort
for(i=1; i<n; i++){
temp=data[i];
j=i-1;

while((data[j]>=temp) && (j>0)){
data[j+1]=data[j];
j=j-1;
}

if(temp>=data[j]){
data[j+1]=temp;
}
else{
data[j+1]=data[j];
data[j]=temp;
}

}

//Searching

cout<<"Data yang anda cari ";cin>>dt;
ketemu=0;
tengah=(n/2)+1;

elmtengah=data[tengah];
i=0;

if(dt==tengah){
ketemu=1;
posisi=tengah;
}

else{
//ketika yang dicari lebih kecil dari nilai tengah
if(dt<elmtengah){
i=0;

while((ketemu==0)&& (i<tengah)&& (data[i]<=dt)){

if(data[i]==dt){
ketemu=1;
posisi=i;
}

else{
i=i+1;
}
}
}

else{ //ketika yang dicari lebih besar dari nilai tengah
i=tengah+1;

while((ketemu==0)&&(i<n)&&(data[i]<=dt)){

if(data[i]==dt){
ketemu=1;
posisi=i;
}
else i=i+1;
}


}

}


//tampilkan hasil
if(ketemu==0){
cout<<"Data yang anda cari tak ditemukan"<<endl;
}

else{
cout<<"Setelah diurutkan "<<endl;
for(i=0; i<n; i++){
cout<<"Data ke - "<<(i+1)<<" "<<data[i]<<endl;
}

cout<<"Data yang anda cari terdapat dalam array "<<endl;
cout<<"Data berada pada posisi "<<(posisi+1);
}



getch();
}



Perbedaannya dengan metode Sequential adalah dengan Binary data dibagi menjadi dua bagian.. hal ini dapat membuat pencarian data lebih cepat dan efisien. Tapi menurut saya lebih panjang,, dan sedikit susah,,

0 comments:

Posting Komentar