Pencarian Data Dengan Metode Biner (Binary Search)
Algoritma pencarian biner merupakan perbaikan dari konsep sebelumnya(pencarian linier) alasannya lebih efisien. Dengan algoritma ini, kita tidak perlu menyidik semua elemen sehingga menghemat waktu pencarian. Algoritma ini dibangun menurut wangsit sebagai berikut:
2. Bila nilai kunci lebih kecil dari nilai tengah, maka algoritma akan mengabaikan setengah bab dari array (mulai dari nilai tengah hingga nilai elemen terbesar). Selanjutnya, proses pencarian difokuskan untuk segmen yang lain, yaiut elemen terkecil hingga kepada nilai tengah. Kemudian, algoritma akan membagi bagi segmen tersebut menjadi dua, dilanjutkan proses pembandingan, dan seterusnya.
3. Bila nilai kunci lebih besar dari nilai tengah, maka algoritma akan mengabaikan segmen yang berisi nilai terkecil hingga nilai tengah. Selanjutnya kaidah pencarian mengikuti contoh pembagian segmen menjadi dua dan membandingkannya dengan nilai tengah, sama menyerupai sebelumnya. Demikian seterusnya hingga elemen yang dicari ditemukan atau elemen array sudah selesai diperiksa.
public class binarySearch {
public static void main(String[] args) {
int array[] = new int[5];
array[0] = 25;
array[1] = 30;
array[2] = 35;
array[3] = 40;
array[4] = 45;
int batasAtas = array.length-1;
int batasBawah = 0;
for(int index = 0 ; index<array.length; index++){
System.out.print(array[index] +" ");
}
System.out.println("");
int cari = 30;
boolean belumKetemu = true;
while(belumKetemu) {
int posisiSekarang = (batasAtas + batasBawah)/2;
if (array[posisiSekarang] == cari) {
belumKetemu=false;
System.out.println("ditemukan" + cari);
} else if(batasBawah > batasAtas) {
System.out.println("tidak ditemukan" + cari);
break;
}else {
if (array[posisiSekarang] < cari) {
batasBawah = posisiSekarang + 1;
}else {
batasAtas = posisiSekarang - 1;
}
}
}
}
}
output :
25 30 35 40 45
ditemukan30
- Urututan terlebih dahulu elemen-elemen array menurut nilainya. Urutan boleh naik (bilangan terkecil dahulu, lalu terakhir bilangan terbesar) atau turun.
- Selanjutnya, ambillah nilai elemen yang terletak pada posisi tengah urutan array tersebut. Kita sebut nilai elemen ini sebagai nilai tengah. Nilai tengah ini membagi array menjadi dua segmen;segmen pertama berisi elemen terkecil hingga nilai tengah, sedangkan segmen kedua berisi elemen nilai tengah hingga nilai terbesar.
- Bandingkanlah nilai elemen yang dicari (kunci) dengan nilai tengah ini. Proses pembandingan ini mempunyai tiga kemungkinan:
2. Bila nilai kunci lebih kecil dari nilai tengah, maka algoritma akan mengabaikan setengah bab dari array (mulai dari nilai tengah hingga nilai elemen terbesar). Selanjutnya, proses pencarian difokuskan untuk segmen yang lain, yaiut elemen terkecil hingga kepada nilai tengah. Kemudian, algoritma akan membagi bagi segmen tersebut menjadi dua, dilanjutkan proses pembandingan, dan seterusnya.
3. Bila nilai kunci lebih besar dari nilai tengah, maka algoritma akan mengabaikan segmen yang berisi nilai terkecil hingga nilai tengah. Selanjutnya kaidah pencarian mengikuti contoh pembagian segmen menjadi dua dan membandingkannya dengan nilai tengah, sama menyerupai sebelumnya. Demikian seterusnya hingga elemen yang dicari ditemukan atau elemen array sudah selesai diperiksa.
Berikut source codenya:
public static void main(String[] args) {
int array[] = new int[5];
array[0] = 25;
array[1] = 30;
array[2] = 35;
array[3] = 40;
array[4] = 45;
int batasAtas = array.length-1;
int batasBawah = 0;
for(int index = 0 ; index<array.length; index++){
System.out.print(array[index] +" ");
}
System.out.println("");
int cari = 30;
boolean belumKetemu = true;
while(belumKetemu) {
int posisiSekarang = (batasAtas + batasBawah)/2;
if (array[posisiSekarang] == cari) {
belumKetemu=false;
System.out.println("ditemukan" + cari);
} else if(batasBawah > batasAtas) {
System.out.println("tidak ditemukan" + cari);
break;
}else {
if (array[posisiSekarang] < cari) {
batasBawah = posisiSekarang + 1;
}else {
batasAtas = posisiSekarang - 1;
}
}
}
}
}
output :
ditemukan30
Comments
Post a Comment