Anda di halaman 1dari 6

Algoritma Pemrograman I

Pertemuan 14
SEARCH

SEARCHING  adalah suatu proses untuk menemukan informasi dari sejumlah


data yang ada .

ada beberapa metode search, akan tetapi pada bab ini kita akan membahas 2
metode yaitu:
1. Metode Sequential search
2. Metode Binary search

Ad1. Metode Squential search


Suatu metode pencarian data dengan cara membandingkan setiap elemen
satu persatu secara beruntun, mulai dari elemen pertama hingga elemen yang di
cari di temukan, atau seluruh elemen sudah di periksa.
Contoh:

13 16 14 21 76 15
1 2 3 4 5 6

Misalkan nilai yang dicari: X= 21


Elemen yang di bandingkan : 13,16,14,21 (ditemukan)
Indeks larik yang dikembalikan IDX= 4

Misalkan nilai yang dicari: X= 13


Elemen yang di bandingkan : 13 (ditemukan)
Indeks larik yang dikembalikan IDX= 1

Misalkan nilai yang dicari: X= 15


Elemen yang di bandingkan : 13,16,14,21,76,21 (ditemukan)
Indeks larik yang dikembalikan IDX= -1

Setiap elemen pada larik L akan dibandingkan dengan X mulai dari elemen L[1].
Proses perbandingan akan terus dilakukan selama indeks larik tidak melebehi N
(jumlah larik) dan larik ke [k] tidak sama dengan X
Dan nilai yang dikembalikan adalah peubah boolean yaitu Ketemu = true dan tidak
ketemu = false.

Procedure sequentialsearch1(input L : larik, input n: integer, input


x:integer, output ketemu: integer)
{Mencari keberadaan nilai X di dalam L[1..n].
K.awal: X dan larik L[1..n] sudah terdefenisih nilainya dan
K.Akhir ketemu bernilai True jika x Ditemukan, jika X tidak di
temukan maka ketemu =bernilai False}
Deklarasi

STMIK TRIGUNA DHARMA 55


Algoritma Pemrograman I

K: integer; {indeks larik}


Deskripsi
K  1
While (K<n) and (L[K] <> x do
K  K +1
Endwhile
{K = n or L [K]= x}
If L[k] =x then {di temukan}
Ketemu  true
Else
Ketemu  false {tidak ada di dalam larik}
Endif

Ad2. Metode Binary Search


Suatu metode pencarian data dengan cara membagi dua data

Syarat-syarat yang harus di penuhi pada metode ini adalah:

1. Data harus sudah terurut baik ascending atau descending.


2. Bagi dua elemen larik pada elemen tengah
Indeks k=(i+j) div 2
Bagian kiri L[i..j] dan kanan L[k+1..j]
3. Periksa apakah L[ k] = x ,jika ya ketemu pencarian selesai.
Jika tidak tanyakan Apakah L[k] < x jika ya pencarian dilakukan di bagian kiri dan
sebaliknya jika L[k] > x di cari dikanan . hal ini tergantung larik terurut ascending
atau descending.
4. Ulangi langkah 1 sampai x di temukan atau i>j yaitu ukuran larik sudah nol.

Contoh:
Ilustrasi pencarian data . misalkan Larik L dengan 8 buah elemen terurut menurun
sbb:

81 76 21 18 16 13 10 7
i=1 2 3 4 5 6 7 8=j

misalkan elemen yang di cari adalah x=18


Langkah 1.
i= 1 dan j=8
indeks elemen tengah k=(1+8) div 2 = 4(diarsir)

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8

Kiri Kanan
Langkah 2:
L[4] =18? Ya ! ( X di temukan, Pencarian selesai)

STMIK TRIGUNA DHARMA 56


Algoritma Pemrograman I

(ii) Misalkan elemen yang di cari adalah X=16.


Langkah 1:
i= 1 dan j=8
indeks elemen tengah k=(1+8) div 2 = 4(diarsir)

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8

Kiri Kanan
k
Langkah 2:

L[4] = 16 ? Tidak! Maka akan diputuskan cari di bagian kiri atau bagian kanan.

L[4] > 16 ? Ya! Maka cari dikanan dengan

i= k+1 =5 dan j = 8(tetap)

16 13 10 7
i= 5 6 7 j= 8

Langkah 1:
i=5 dan j= 8
indeks elemen tengah k =(5 + 8) div 2 =6(diarsir)

16 13 10 7
i= 5 6 7 j= 8

kiri kanan
k
Langkah 2:
L[6]= 16? Tidak
L[6] >16? Tidak maka cari di bagian kiri

STMIK TRIGUNA DHARMA 57


Algoritma Pemrograman I

i=5 (tetap) dan j=k-1 = 5

16
i= 5

Langkah 1:

i=5 dan j=5


indeks elemen tengah k=( 5+5) div 2 = 5( di arsir)

16

Langkah 2 L[5] = 16 ? ya! (X di temukan, Pencarian selesai)

Contoh Program binary search

{* SRTUKTUR DATA BY MARSONO,S.KOM


* program mencari data pada suatu larik
* pencarian dilakukan dengan metode binary search }
PROGRAM PENCARIAN_BINER;
USES CRT;
TYPE LARIK = ARRAY[1..100] OF INTEGER;
VAR VEKTOR : LARIK;
KETEMU : BOOLEAN;
CARI,LOKASI,CACAH, BARIS: INTEGER;

{ ------ PROCEDURE MEMBACA ELEMEN VEKTOR --------}


PROCEDURE BACA_VEKTOR(VAR VEKTOR: LARIK; VAR N, BARIS : INTEGER);
VAR I, KOLOM :INTEGER;
BEGIN
KOLOM :=1;
WRITE('BERAPA CACAH ELEMENNYA: '); READLN(N);
WRITELN('MASUKKAN ELEMEN ELEMENNYA(SECARA TERURUT): ');
WRITELN('ASCENDING ATAU DESCENDING');
WRITELN;
FOR I :=1 TO N DO
BEGIN
READLN(VEKTOR[I]);
{ GOTOXY(( I MOD 10) * 6(WHEREY -1)}
writeln(I mod 10)
End;
END;

{------- PROCEDURE UNTUK MENCETAK VEKTOR ------- }

STMIK TRIGUNA DHARMA 58


Algoritma Pemrograman I

PROCEDURE CETAK_VEKTOR (VEKTOR : LARIK; N: INTEGER);


VAR I : INTEGER;
BEGIN
FOR I := 1 TO N DO
BEGIN
WRITE(VEKTOR[I]:6);
IF I MOD 10 = 0 THEN WRITELN;
END
END;
{------- PROCEDURE SORT SELEKSI ELEMEN VEKTOR ----}
PROCEDURE SORTIR(VAR VEKTOR: LARIK; N : INTEGER);
VAR I,J,POSISI,BANTU :INTEGER;
BEGIN
FOR I := 1 TO N-1 DO
BEGIN
POSISI :=I;
FOR J := I+1 TO N DO
IF VEKTOR [POSISI] > VEKTOR[J] THEN POSISI := J;
BANTU := VEKTOR[I];
VEKTOR[I] :=VEKTOR[POSISI];
VEKTOR[POSISI] := BANTU
END
END;

{------ PROSEDUR UNTUK MENCARI DATA METODE BINARY SEARCH ----}


PROCEDURE MENCARI_BINER (VAR KETEMU : BOOLEAN; VAR LOKASI : INTEGER;
VAR CARI : INTEGER;
VEKTOR : LARIK; N: INTEGER);
VAR ATAS, BAWAH : INTEGER;
BEGIN
WRITELN; WRITELN;
WRITE('INPUT DATA YANG DI CARI: ');READLN(CARI);
ATAS := N;
BAWAH:= 1;
KETEMU:= FALSE;
WHILE(NOT KETEMU) AND (BAWAH <= ATAS) DO
BEGIN
LOKASI := (ATAS + BAWAH) DIV 2;
IF CARI = VEKTOR[LOKASI] THEN
KETEMU := TRUE
ELSE IF CARI > VEKTOR[LOKASI] THEN
BAWAH := LOKASI + 1
ELSE
ATAS := LOKASI -1;
END;
END;

{ --------------- PROGRAM UTAMA --------------------}


BEGIN
CLRSCR;
BARIS := 8;

STMIK TRIGUNA DHARMA 59


Algoritma Pemrograman I

WRITELN('MENCARI DATA PADA SUATU VEKTOR DENGAN METODE BINARY


SEARCH');
WRITELN('++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++');
BACA_VEKTOR(VEKTOR,CACAH,BARIS);
MENCARI_BINER(KETEMU,LOKASI,CARI,VEKTOR,CACAH);
WRITELN; WRITE('VEKTOR DIATAS TELAH DISORTIR');
WRITELN(' MENJADI (DIBACA PERBARIS): ');
CETAK_VEKTOR( VEKTOR, CACAH);
WRITELN;
IF KETEMU THEN
BEGIN
WRITELN('BILANGAN"', CARI:1,'" ADA PADA VEKTOR DI ATAS');
WRITE('YAITU PADA ELEMEN KE " ',LOKASI:1);
WRITELN('"DARI VEKTOR TERSORTIR')
END
ELSE
WRITELN(' BILANGAN" ',CARI:1,'" TIDAK ADA PADA VEKTOR DIATAS')
;
Readln;
END.

Hasil Program

STMIK TRIGUNA DHARMA 60

Anda mungkin juga menyukai