Pencarian Data dengan Metode Biner (Binary Search)


Algoritma  pencarian biner merupakan perbaikan dari konsep sebelumnya(pencarian linier) karena lebih efisien. Dengan algoritma ini, kita tidak perlu memeriksa semua elemen sehingga menghemat waktu pencarian. Algoritma ini dibangun berdasarkan ide sebagai berikut:

  • Urututan terlebih dahulu elemen-elemen array berdasarkan nilainya. Urutan boleh naik (bilangan terkecil dahulu, kemudian 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 sampai nilai tengah, sedangkan segmen kedua berisi elemen nilai tengah sampai nilai terbesar.
  • Bandingkanlah nilai elemen yang dicari (kunci) dengan nilai tengah ini. Proses pembandingan ini memiliki tiga kemungkinan:
1.    Bila nilai kunci sama dengan nilai tengah, maka pencarian selesai.
2.    Bila nilai kunci lebih kecil dari nilai tengah, maka algoritma akan mengabaikan setengah bagian dari array (mulai dari nilai tengah sampai nilai elemen terbesar). Selanjutnya, proses pencarian difokuskan untuk segmen yang lain, yaiut elemen terkecil sampai 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 sampai nilai tengah. Selanjutnya kaidah pencarian mengikuti pola pembagian segmen menjadi dua dan membandingkannya dengan nilai tengah, sama seperti sebelumnya. Demikian seterusnya sampai elemen yang dicari ditemukan atau elemen array sudah selesai diperiksa. 

Berikut source codenya:

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

Post a Comment

Previous Post Next Post