Penjelasan Binary Search Squential
Penjelasan Binary Search Squential
A : 2,5, 8,12,15
12 3 4 5
Kasus 1 : cari = 12
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
tabint[Tengah] = tabint [4] = 12, berarti loop pertama data langsung ditemukan
Kasus 2 : cari = 15
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
tabint [Tengah] = tabint[4] = 12 < cari = 15, berarti BatasAtas = Tengah + 1 = 4
+1=5
Loop kedua : Tengah = (BatasAtas + BatasBawah) div 2 = (5 + 8) div 2 = 6
tabint [Tengah] = tabint [6] = 25 > cari = 15, berarti BatasBawah = Tengah - 1 =
6-1=5
Loop ketiga : Tengah = (BatasAtas + BatasBawah) div 2 = (5 + 5) div 2 = 5
tabint [Tengah] = tabint [5] = 15, berarti setelah loop ketiga, data ditemukan
Kasus 3 : cari = 10
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
tabint [Tengah] = tabint [4] = 12 > cari = 10, berarti BatasBawah = Tengah - 1 =
4-1=3
Loop kedua : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 3) div 2 = 2
tabint [Tengah] = tabint [2] = 5 < cari = 10, berarti BatasAtas = Tengah + 1 = 2
+1=3
Loop ketiga : Tengah = (BatasAtas + BatasBawah) div 2 = (3 + 3) div 2 = 3
tabint [Tengah] = taintb [3] = 8, berarti setelah loop ketiga, data tidak ditemukan
Algoritma
uses
crt
const
min 1
max 100
type arrint = array [min..max] of integer
var
x: integer
tabint: arrint
n,i,j,indeks : integer
pilih : char
ats,bwh,tngh: integer
ketemu:boolean
indeksxx: integer
begin
ats 1
bwh n
ketemu false
indeksxx 0
while ((ats <= bwh) and (not ketemu)) do
begin
tngh (ats+bwh) div 2
if xx = tabint[tngh] then
begin
ketemu true
indeksxx tngh
end
else
begin
if xx = tabint[tngh] then
bwh tngh-1
else
ats tngh+1
end
end
binary indeksxx
end
procedure insert
var min,urut,k : integer
l,m:string
begin
urut 1
for i 1 to n-1 do
begin
min i
for j urut to n do
begin
if tabint[j] < tabint[min] then
min j
procedure menu1
begin writeln('--------------------------------------')
writeln(' Pencarian Sequential ')
writeln('--------------------------------------')
write('Jumlah data : ') readln(n)
writeln
for 1 to n do
begin
write('Indeks [',i,'] : ') readln(tabint[i])
end
writeln
procedure menu2
begin writeln('--------------------------------------')
writeln(' Pencarian Binary ')
writeln('--------------------------------------')
write('Jumlah data : ') readln(n)
writeln
for i 1 to n do
begin
write('Indeks [',i,'] : ') readln(tabint[i])
end
writeln
insert
write('Data setelah diurutkan : ')
for i 1 to n do
write(tabint[i]:2)
writeln
writeln
write('Cari : ') readln(x)
indeks:=binary(x)
writeln
if indeks <> 0 then
write(x,' Ditemukan pada indeks ke-',indeks)
else
write(x,' Tidak ditemukan')
writeln
writeln('---------------------------------------')
readln
writeln('Press any key to continue...')
end
begin
repeat
writeln('------------------------------------------------')
writeln(' Program Pencarian ')
writeln('-----------------------------------------------')
writeln(' [1] Pencarian Sequential')
writeln(' [2] Pencarian Binary')
writeln(' [0] Keluar ')
writeln
write('Pilih : ') readln(pilih)
case pilih of
'1' : begin
menu1
readln
end
'2' : begin
menu2
readln
end
'0': exit
end
until pilih='0'
end.
Array A
1 75
2 73
3 78
4 81
5 80
Pada gambar di atas, nilai 1, 2, …5 merupakan indeks array sedangkan nilai 75, 73,
… 80 merupakan nilai yang terkandung dalam elemen-elemen array. Sekarang misalkan
kita akan melakukan pencarian data 78 di dalam array tersebut, maka salah satu cara
yang dapat digunakan adalah dengan membandingkan nilai 78 tersebut dengan seluruh
elemen array (dari A[1] sampai A[5]). Mula-mula kita akan membandingkan nilai 78
dengan elemen pertama (A[1]), karena nilainya tidak sama maka pencarian akan
dialnjutkan ke elemen berikutnya (A[2]), begitu seterusnya. Pada saat elemen ketiga, nilai
A[3] sama dengan nilai yang dicari pencarian akan dihentikan.
k1 = 7
Keadaan kedua
20 22 24 25 26 28 29
K2 = 11
Keadaan ketiga
Hentikan pencarian
20 22 24
K3 = 11
Pada gambar di atas, array terdiri dari 14 buah elemen yang sudah terurut secara
menaik dengan indeks 1 sampai 14. Mula-mula (keadaan pertama), array akan dibagi
menjadi dua bagian. Pembatasnya adalah indeks ke-7. Nilai 7 didapat dari (1+14) div 2.
Karena nilai pada indeks ke-7 (nilai 19) lebih kecil dari nilai yang dicari (nilai 22), maka
proses pencarian akan diulang untuk indeks ke-8 sampai ke-14. Pada keadaan kedua ini
array tersebut juga akan dibagi menjadi dua. Kali ini pembatasnya adalah indeks ke-11,
yang berasal dari (8+4) div 2. Karena nilai pada indeks ke-11 (nilai 25) lebih besar dari
nilai yang dicari (niali 22), maka proses pencarian akan dilakukan lagi untuk indeks ke-
8 sampai ke-10. Pada keadaan ini (keadaan ketiga), array akan dibagi menjadi dua pada
indeks ke-9, yang berasal dari (8+10) div 2. Karena nilai pada indeks ke-9 sama dengan
nilai yang dicari, maka proses pencarian pun dihentikan. Untuk lebih memperjelas
pembahasan serta menunjukkan implementasinya