Pengertian Binary Search dan contoh implementasinya

by 03.04 2 komentar
Binary search adalah metode pencarian suatu data atau elemen di dalam suatu array dengan kondisi data dalam keadaan terurut. Proses pencarian binary search hanya dapat dilakukan pada sekumpulan data yang sudah diurutkan terlebih dahulu. Prinsip dari binary search terhadap N elemen dapat dijelaskan seperti berikut:
    1.      Tentukan posisi awal = 0 dan posisi akhir = N-1.
    2.      Hitung posisi tengah = (posisi awal + posisi akhir)/2.
    3.      Bandingkan data yang dicari dengan elemen posisi tengah.
-       -     Jika sama maka catat posisi dan cetak kemudian berhenti.
-       -    Jika lebih besar maka akan dilakukan pencarian kembali kebagian kanan dengan posisi awal =        
p      posisi tengah +1 dan posisi akhir tetap kemudian ulangi mulai poin 2.
-       -   Jika lebih kecil maka akan di lakukan pencarian kembali ke bagian kiri dengan nilai posisi awal 
t       tetap dan nilai posisi akhir  = posisi tengah-1 kemudian ulangi mulai poin 2.
Misalkan kita mempunyai sederatan data dalam array nilai sebanyak 10 elemen dan akan dilakukan pencarian data 87 terhadap array.
Nilai[0..9] = 12,45,23,87,90,55,15,25,40,21
Urutkan elemen array secara menaik, sehingga diperoleh:
Nilai[0..9] = 12,15,21,23,25,40,45,55,87,90
Data yang akan dicari = 87(bilangan)
Tentukan nilai awal = 0, akhir = N-1=9
Hitung tengah = (9+0)/2=4
Bandingkan Bilangan < Nilai[tengah]->87=25->false
Bandingkan Bilangan < Nilai[tengah]->87<25->false
Bandingkan Bilangan < Nilai[tengah]->87>25->true maka pencarian dilakukan ke sebelah kanan dengan nilai awal = tengah+1 = 5
Karena awal masih lebih kecil dari akhir maka ulangi kembali mulai menghitung tengah
Hitung tengah = (9+5)/2=7
Bandingkan Bilangan  < Nilai[tengah] ->87=55->false
Bandingkan Bilangan < Nilai[Tengah]->87<55->false
Bandingkan Bilangan < Nilai[tengah]->87>55->true maka pencarian dilakukan ke sebelah kanan dengan nilai awal = tengah+1 = 8
Karena awal masih lebih kecil dari akhir maka ulangi kembali mulai menghitung tengah
Hitung tengah = (9+8)/2 = 8
Bandingkan Bilangan < Nilai[tengah]->87=87->true
Karena sudah di tentukan hasilnya maka proses pencarian berhenti.
Contoh implementasinya kedalam koding:

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

using namespace std;

int main()
{
    //Pendeklarassian variabel
    int nilai[20];
    int i,j,n;
    int temp, awal, akhir, tengah, bilangan;

    //Proses penginputan data
    cout<<"Banyak Bilangan: ";
    cin>>n;
    for(i=0;i<n;i++)
    {
        cout<<"Elemen ke-"<<i<<" =";
        cin>>nilai[i];
    }
    cout<<"\n\nElemen sebelum diurut  = ";
    for(i=0;i<n;i++)
    {
        cout<<setw(3)<<nilai[i];
    }

    //Proses pengurutan data
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(nilai[i]>nilai[j])
            {
                temp = nilai[i];
                nilai[i]=nilai[j];
                nilai[j]=temp;
            }
        }
    }

    cout<<"\nElemen Setelah Di Urut = ";
    for(i=0;i<n;i++)
    {
        cout<<setw(3)<<nilai[i];
    }

    cout<<"\nIndeks Elemen           =";
    for(i=0;i<n;i++)
    {
        cout<<setw(3)<<i;
    }

    cout<<"\n\nMasukan data Yang Akan Anda Cari: ";
    cin>>bilangan;

    //Proses pencarian data
    awal = 0;
    akhir =n-1;

    do
    {
        tengah = (akhir+awal)/2;
        if(bilangan < nilai[tengah])
        {
            akhir = tengah -1;
        }
        else
        {
            awal = tengah +1;
        }
    }

    while((akhir>=awal)&&(nilai[tengah] !=bilangan));
    {
        if (nilai[tengah]==bilangan)
        {
            cout<<"\nData "<<bilangan<<" Ada dalam Array";
            cout<<"Pada posisi "<<tengah;
        }
        else
        {
            cout<<"\nData "<<bilangan<<" tidak ada dalam array\n";
        }
    }

    getch();
    return 0;
}


Jika di compile maka akan tampak seperti gambar di bawah ini:


Sumber  :  Buku konsep dan implementasi struktur data dengan C++
Oleh       : Lamhot Sitorus dan David J.M Sembiring
Penerbit : Andi

Simpan Gambar Aja

NIM: 140010297

Nama Dosen: IB KETUT SURYA ARNAWA, S.Kom.
Asisten : Steven Anthony

2 komentar:

  1. mas rumusnya salah itu.di bagian sini
    berikut:
    1. Tentukan posisi awal = 0 dan posisi akhir = N-1.
    harusnya posisi akhir itu sama dengan N.bukan N min 1.

    BalasHapus