Anda di halaman 1dari 5

Binary Search / Pencarian bagi dua

Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau menurun).
Metode ini lebih cepat dibandingkan metode pencarian beruntun. Data yang sudah terurut
menjadi syarat mutlak untuk menggunakan metode ini.
Konsep dasar
Metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data yang berada
pada elemen paling tengah bernilai sama, lebih dari atau kurang dari nilai data yang akan dicari.
Jika bernilai sama, maka langsung data yang dicari ditemukan. Jika data di elemen terurut naik,
maka jika data yang berada di tengah kurang dari data yang dicari, maka pencarian selanjutnya
berkisar di elemen tengah ke kanan, dan begitu seterusnya sampai ketemu atau tidak sama
sekali

Langkah-langkah
Kita perlu 3 buah variabel penanda yaitu i, j, k
i : penanda kiri
j : penanda kanan
k : penanda nilai tengah. Kondisi “ketemu” terjadi jika posisi k tepat pada bilangan yang dicari

i k j

10 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Posisi k adalah nilai tengah = indeks tengah


Indeks tengah = indeks kanan – indeks kiri
= (19-0) / 2
= 8,5 = integer, bilangan bulat maka k pada indeks 8
Procedure BinarySearch{prosedur untuk mengurutkan data dalam array
dengan metode binary search/ pencarian bagi dua
I.S : array A terdefinisi dengan elemen sebanyak N elemen terurut
menaik
F.S : pencarian bilangan X sudah dicari dengan metode biner}

Deklarasi
A : array 0..N of int
i, j, k : integer {variabel penanda indeks}
x : integer {bilangan yang dicari}
ketemu : boolean

Deskripsi
i  0
j  N
ketemu  false

while (not ketemu) and (i<j) do


k (i+j) div 2 //tentukan posisi k
if (A[k] = x) then
ketemu  true
else if (A[k] < x) then //lakukan pencarian pada kanan
i  k+1
else
j  k-1 // lakukan pencarian sebelah kiri
endif
endwhile

if (ketemu=true)
write (“bilangan ditemukan pada indeks ke k”)
else
write (“bilangan tidak ditemukan”)
endif
SOAL 1 elseif (A[k] < x) then
//pencarian ke sebelah kanan
2 3 5 7 13 15 19 21 i  k+1
0 1 2 3 4 5 6 7 else
j  k-1 //pencarian
X = 7 ke sebelah kiri
endif
Deskripsi endwhile
X  7
i  0 if (ketemu=true)
j  9 write (“bilangan ditemukan pada
ketemu  false indeks ke k”)
while (not ketemu) and (i<=j) do else
k (i+j) div 2 //tentukan write (“bilangan tidak
posisi k ditemukan”)
if (A[k] = x) then endif
ketemu  true
SIMULASI loop-1
i k 2 3 5 7 13 15 19 21 25
j 0 1 2 3 4 5 6 7 8
2 3 5 7 13 15 19 21
0 1 2 3 4 5 6 7 X = 21

Variabel Indeks Indeks Deskripsi


awal akhir X  21
i 0 0 I  0
j 9 k-1 = 3 j  9
k (i+j)/2=4 4 ketemu  false
while (not ketemu) and (i<=j) do
SIMULASI loop-2 k (i+j) div 2 //tentukan
posisi k
i k j if (A[k] = x) then
ketemu  true
2 3 5 7 13 15 19 21 elseif (A[k] < x) then
0 1 2 3 4 5 6 7 //pencarian ke sebelah kanan
i  k+1
Variabel Indeks Indeks else
awal akhir j  k-1 //pencarian
i 0 k+1 = 2 ke sebelah kiri
j 3 3 endif
k (i+j)/2= 1 endwhile
1 if (ketemu=true)
write (“bilangan ditemukan pada
indeks ke k”)
SIMULASI loop-3 else
write (“bilangan tidak
i,k j ditemukan”)
endif
2 3 5 7 13 15 19 21
SIMULASI loop-1
0 1 2 3 4 5 6 7
I k
Variabel Indeks Indeks j
awal akhir 2 3 5 7 13 15 19 21 25
i 2 k+1=3 0 1 2 3 4 5 6 7 8
j 3 3
k (i+j)/2= 2 Variabel Indeks Indeks
2 awal akhir
i 0 K+1=5
j 9 0
SIMULASI loop-4
k (i+j)/2=4 4
i,j,k

2 3 5 7 13 15 19 21
SIMULASI loop-2
0 1 2 3 4 5 6 7
i
Variabel Indeks Indeks k j
awal akhir 2 3 5 7 13 15 19 21 25
i 3 0 1 2 3 4 5 6 7 8
j 3
k (i+j)/2=3 Variabel Indeks Indeks
SOAL 2 awal akhir
i 0
j 9
k (i+j)/2=7
TUGAS

1. Diberikan sebuah array A bertipe integer dengan 20 elemen yang terurut secara menurun.

61 59 57 53 51 47 43 41 39 37 31 29 23 19 17 13 11 7 5 3
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Buatlah algoritma untuk melakukan pencarian bilangan X didalam array A, dengan menggunakan metode
binary search!

2. Dengan algoritma yang anda buat pada nomor 1. Buatlah simulasi seperti yang dicontohkan jika
a. X = 47
b. X = 13

Anda mungkin juga menyukai