Search Binary
A. Pengertian Binary Search
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.
B.
Prinsip – Prinsip Biner
Prinsip dari pencarian biner dapat
dijelaskan sebagai berikut:
1.Mula-mula diambil posisi awal = 1 dan posisi akhir = N
2.Cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2
3.Data yang dicari dibandingkan dengan data tengah.
4.Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah – 1.
5.Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.
6.Demikian seterusnya sampai data tengah sama dengan yang dicari.
1.Mula-mula diambil posisi awal = 1 dan posisi akhir = N
2.Cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2
3.Data yang dicari dibandingkan dengan data tengah.
4.Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah – 1.
5.Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.
6.Demikian seterusnya sampai data tengah sama dengan yang dicari.
Untuk lebih jelasnya, perhatikan contoh
berikut. Misalkan kita ingin mencari 17 pada sekumpulan data berikut :
1.Mula–mula dicari data tengah, dengan rumus (1+ 9) / 2 = 5.
2.Berarti data tengah adalah data ke-5, yaitu 15.
3.Data yang dicari, yaitu 17, dibandingkan dengan data tengah ini.
4.Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi awal dianggap sama dengan posisi tengah + 1 atau 6.
1.Mula–mula dicari data tengah, dengan rumus (1+ 9) / 2 = 5.
2.Berarti data tengah adalah data ke-5, yaitu 15.
3.Data yang dicari, yaitu 17, dibandingkan dengan data tengah ini.
4.Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi awal dianggap sama dengan posisi tengah + 1 atau 6.
1.Data tengah yang baru didapat dengan rumus (6
+ 9) / 2 = 7. Berarti data tengah yang baru adalah data ke-7, yaitu 23.
2.Data yang dicari, yaitu 17 dibandingkan dengan data tengah ini.
3.Karena 17 < 23, berarti proses dilanjutkan tetapi kali ini posisi akhir dianggap sama dengan posisi tengah – 1 atau 6.
2.Data yang dicari, yaitu 17 dibandingkan dengan data tengah ini.
3.Karena 17 < 23, berarti proses dilanjutkan tetapi kali ini posisi akhir dianggap sama dengan posisi tengah – 1 atau 6.
1.Data tengah yang baru didapat dengan rumus (6
+ 6) / 2 = 6. Berarti data tengah yang baru adalah data ke-6, yaitu 17.
2.Data yang dicari dibandingkan dengan data tengah ini dan ternyata sama. Jadi data ditemukan pada indeks ke-6.
3.Bagaimana jika data yang dicari tidak ada, misalnya 16?
4.Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar dari posisi akhir.
5.Jika posisi awal sudah lebih besar daripada posisi akhir berarti data tidak ditemukan.
Untuk lebih jelasnya perhatikan proses pencarian 16 pada data di atas. Prosesnya hampir sama dengan pencarian 17. Tetapi setelah posisi awal = posisi akhir = 6, proses masih dilanjutkan lagi dengan posisi awal = 6 dan posisi akhir = 5
2.Data yang dicari dibandingkan dengan data tengah ini dan ternyata sama. Jadi data ditemukan pada indeks ke-6.
3.Bagaimana jika data yang dicari tidak ada, misalnya 16?
4.Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar dari posisi akhir.
5.Jika posisi awal sudah lebih besar daripada posisi akhir berarti data tidak ditemukan.
Untuk lebih jelasnya perhatikan proses pencarian 16 pada data di atas. Prosesnya hampir sama dengan pencarian 17. Tetapi setelah posisi awal = posisi akhir = 6, proses masih dilanjutkan lagi dengan posisi awal = 6 dan posisi akhir = 5
Disini dapat dilihat bahwa posisi awal lebih
besar daripada posisi akhir, yang artinya data tidak ditemukan
C. Listing Program
#include
<iostream>
#include
<conio.h>
using
namespace std;
int
main(){
const int Ar[10] = {1,2,3,4,5,6,7,8,9,10}; //
untuk proses ascending
int tar;
cout<<"masukan
data yang dicari : ";
cin>>tar;
int
awal=0, akhir=10, tengah;
while (awal <= akhir)
{ tengah = (awal + akhir)/2;
if (tar > Ar[tengah] ) // descending ubah tanda > menjadi
<
{ awal = tengah + 1; }
else if (tar < Ar[tengah]) // descending ubah tanda < menjadi >
{akhir= tengah - 1;}
else {awal = akhir +1;
}
}
if (tar == Ar[tengah])
{cout<<" Data ditemukan, Ke-
"<<tengah+1<<endl;
}
else {
cout<<"target tidak ditemukan
"<<endl;
}
getch();
}
D. Hasil Running