1. Mengerti masalah
Memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang dicari dengan data yang ada di dalam tabel, khususnya untuk jumlah data yang sangat besar ukurannya.
2. Percobaan dengan data
Misal data A-> [ 1 2 3 4 5 6]
indeks 0 1 2 3 4 5
key =2
maka ditemukan nilai 2 ditemukan pada indeks ke 1
3. Analisis
- Data diambil dari posisi 1 sampai posisi akhir N
- Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2
- Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar?
- Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1
- Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1
- Jika data sama, berarti ketemu
4. Algoritma program
function pencarianBiner(input aray : larik; kunci, low, high : integer) : integer
Deklarasi
ketemu : boolean
i, middle : integer
Deskripsi
ketemu <- false
while (low <= high) and (not ketemu) do
middle <- (low+high) div 2
if (kunci = aray[middle]) then ketemu <- true { data pencarian = data di tengah }
else if (kunci < aray[middle]) then high <- middle – 1 {data akan dicari lagi di sebelah kiri}
else low <- middle + 1 {data akan dicari lagi di sebelah kanan}
endif
endwhile
if ketemu then pencarianBiner := middle
else pencarianBiner := -1;
endif
5. program dengan c++
#include <iostream>
#define UKURAN 15
using namespace std;
void cetakBaris(int b[], int rendah, int mid, int tinggi)
{ int i;
for (i=0; i<=UKURAN-1; i++)
if (i<rendah || i>tinggi) cout << " ";
else if (i==mid) cout << "*" << b[i]<<" ";
else cout << b[i] << " ";
cout << "\n";
}
int pencarianBiner(int b[], int kunciPencarian, int rendah, int tinggi )
{ int i, middle;
while (rendah <= tinggi) {
middle = (rendah+tinggi) / 2;
cetakBaris(b, rendah, middle, tinggi);
if (kunciPencarian == b[middle])
return middle;
else if (kunciPencarian < b[middle])
tinggi = middle - 1;
else rendah = middle + 1;
}
return -1;
}
main() {
int a[UKURAN]={1, 2, 8, 25, 30, 49, 50, 55, 60, 61, 68, 70, 72, 84,
90}, i, kunci, hasil;
for (i=0; i<=UKURAN-1; i++){
cout<<a[i]<<" ";
}
cout<<endl<<endl;
cout << "Masukkan bilangan yg ingin dicari index nya : ";
cin >> kunci;
hasil=pencarianBiner(a,kunci,0,UKURAN-1);
if (hasil != -1) cout << kunci
<< " ditemukan pada index : "<< hasil;
else
cout << kunci << " tidak ditemukan";
return 0;
}
download raptor
Tidak ada komentar:
Posting Komentar