0% found this document useful (0 votes)
30 views15 pages

Penjelasan Binary Search Squential

The document discusses binary search and sequential search algorithms. It provides examples of searching for values in a sorted array using both methods. Binary search divides the array in half on each step to narrow down the search area, making it faster than sequential search which checks each element in order. The document includes pseudocode for implementing the searches in Pascal and explains the steps and logic of each algorithm through examples.

Uploaded by

Default Coy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views15 pages

Penjelasan Binary Search Squential

The document discusses binary search and sequential search algorithms. It provides examples of searching for values in a sorted array using both methods. Binary search divides the array in half on each step to narrow down the search area, making it faster than sequential search which checks each element in order. The document includes pseudocode for implementing the searches in Pascal and explains the steps and logic of each algorithm through examples.

Uploaded by

Default Coy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 15

Penjelasan Binary Search

Contoh Nilai-Nilai data yang sudah terurut :

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

function sequen(xx: integer): integer


var i: integer
begin
i 1
while ((i<n) and (tabint[i]<>xx)) do
i i+1
if tabint[i]= xx then
sequen i
else
sequen 0
end

function binary(xx: integer):integer


var

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

if tabint[i] <> tabint[min] then


begin
k tabint[i]
end

if tabint[i] > tabint[min] then


begin
tabint[i] tabint[min]
tabint[min] k
end
end
urut urut+1
end
end

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

write('Cari : ') readln(x)


indeks:=sequen(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

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.

Listing Code dan Output nya


Penjelasan Pencarian Squential Search

1.Misalkan nilai yang


dicari adalah: x = 12 Elemen yang dibandingkan (berturut-
turut):2, 5,8, 12,15 (ditemukan!) Indeks larik yang dikemballkan:
idx • 4
2.Misalkan nilai yang dicari adalah: x = 15 Elemen yang
dibandingkan (berturut-turut): 13 (ditemukan!) lndeks larik yang
di kembah'kan: idx = 5
3.Misalkan nilai yang dicari adalah: x = 20 Elemen yang
dibandingkan (berturut-turut): 2, 5 , 8, 12, 15 (tidak ditemukan!)
Indeks larikyang dikemballkan:
ldx = -1

(1) Definisi Pencarian (Searching)


Pencarian (searching) data tertentu yang terkandung di dalam array merupakan hal
yang banyak ditemukan dalam kasus-kasus pemrograman. Maka dari itu, pada bagian
ini kita akan membahas mengenai cara yang seharusnya digunakan untuk melakukan
hal tersebut serte pengimplementasiannya di dalam bahasa Pascal. Dalam ilmu
algoritma, metode pencarian data di dalam array diklasifikasikan menjadi dua, yaitu
metode pencarian beruntun (sequential search) dan metode pencarian bagi dua/pencarian
biner (binary search). Berikut ini penjelasannya dari kedua metode tersebut.

2) Metode Pencarian Beruntun


Metode ini banyak digunakan karena efektif untuk melakukan pencarian dari
sekumpulan data, baik data sudah terurut maupun yang belum terurut atau masih acak.
Bila dibandingkan dengan yang lainnya, metode ini memiliki cara kerja yang relatif
mudah untuk dipahami. Dalam metode ini, data yang dicari akan dibandingkandengan
seluruh elemen array yang ada. Sebagai contoh, apabila kita memiliki array A yang
memiliki indeks 1 sampai n dan kita akan mencari nilai x di dalam array tersebut, maka
nilai x tersebut akan dibandingkan dengan nilai A[1] sampai A[n]. Dalam metode ini juga
diterapkan bahwa apabila data ditemukan pada indeks tertentu, maka proses pencarian
akan dihentikan. Hal ini bertujuan agar proses pembandingan nilai tidak dilakukan
sampai indeks terakhir karena nilai yang dicari telah ditemukan.Agar lebih memperjelas,
perhatikan gambar proses pencarian data berikut.

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.

3) Metode Pencarian Bagi Dua


Berbeda dengan metode pencarian beruntun yang dapat digunakan untuk data
belum terurut, metode pencarian bagi dua ini hanya dapat digunakan untuk data-data
yang telah terurut, baik secara menaik maupun menurun.
Dalam metode ini elemen array akan dibagi menjadi dua, sehingga banyaknya
proses pembandingan nilai dapat dikurangi. Sebagai contoh, apabila terdapat array A
yang memiliki n buah elemen dengan indeks 1 sampai n dan datanya telah terurut secara
menaik, maka array tersebut akan dipenggal pada indeks ke-k, dimana k = n + 1 div 2.
hal tersebut mengakibatkan array A terbagi menjadi dua bagian, yaitu dari A[1] . . A[k-
1] dan A[k+1] . . A[n], sedangkan a[k] menjadi pemenggal atau pembatas antara dua
bagian tersebut. Apabila x (nilai yang dicari) sama dengan nilai A[k] maka hentikan
pencarian, sedangkan bila tidak, periksa apakah nilai A[k] > x ataukah A[k] < x. Bila A[k]
lebih besar dari x, maka ulangi metode pencarian tersebut untuk A[1] sampai A[k-1].
Sebaliknya, apabila A[k] lebih kecil dari x, maka ulangi metode pencarian tersebut untuk
A[k+1] sampai A[n]. Perhatikan gambar berikut.
Nilai yang dicari
Keadaan pertama
10 12 14 15 16 18 19 20 22 24 25 26 28 29

k1 = 7
Keadaan kedua
20 22 24 25 26 28 29

K2 = 11
Keadaan ketiga
Hentikan pencarian
20 22 24
K3 = 11

Gambar 6.2. Pencarian Data dengan Metode Pencarian Bagi Dua(sumber:Rahardjo)

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

You might also like