You are on page 1of 18

PENCARIAN (SEARCHING)

DEFINISI PENCARIAN DALAM LARIK


 Pencarian (Searching) merupakan proses yang
fundamental dalam pemrograman.
 Proses pencarian adalah menemukan nilai (data)
tertentu di dalam sekumpulan nilai yang bertipe
sama (tipe dasar atau tipe bentukan).
DEFINISI PENCARIAN DALAM LARIK
 Hasil atau keluaran dari persoalan pencarian dapat
bermacam-macam, misalnya:
 Pesan bahwa x ditemukan atau tidak ditemukan dalam
larik
 Indeks elemen larik, jika x ditemukan maka simpan
indeks larik tempat x ditemukan ke dalam peubah IDX,
jika tidak terdapat dalam larik L, IDX diisi dengan harga
0.
 Peubah boolean, jika x ditemukan maka sebuah peubah
boolean, misalnya “ketemu”, diisi dengan nilai true,
sebaliknya “ketemu” diisi dengan false.
DEFINISI PENCARIAN DALAM LARIK
 Algoritma yang akan dibahas di dalam ini
adalah :
 Pencarian beruntun (Sequential search)
 Pencarian bagidua (Binary search)
1 2 3 4 5 6

PENCARIAN BERUNTUN (SEQUENTIAL SEARCH)

 Pencarian beruntun adalah proses membandingkan setiap


elemen larik satu persatu secara beruntun,.
 Mulai dari elemen pertama sampai elemen yang dicari
ditemukan, atau seluruh elemen sudah diperiksa.
 Perhatikan larik L di bawah ini:
PENCARIAN BERUNTUN (SEQUENTIAL SEARCH)

 Pendeklarasian:
Deklarasi
Const Nmaks = 100 {jumlah maksimum elemen
larik }
Type Larik : Array [1..Nmaks] of integer
PENCARIAN BERUNTUN (SEQUENTIAL SEARCH)

 Beberapa versi algoritma pencarian beruntun:


a. Versi 1 (Tidak menggunakan peubah Boolean)
 Elemen larik L dibandingkan mulai dari elemen L[1].
 Proses pembandingan terus dilakukan selama elemen
L[k] tidak sama dengan X dan indeks larik belum
sama dengan n.
 Pembandingan dihentikan bila L[k] = x atau indeks
larik sudah sama dengan N.
PENCARIAN BERUNTUN (SEQUENTIAL SEARCH)
procedure cari_Indeks (input L : larik, input n, x : integer,
output idx : integer)

Deklarasi
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 { x ditemukan }
Idx  k
else
Idx  0
endif
PENCARIAN BERUNTUN (SEQUENTIAL SEARCH)

b. Versi 2 (Menggunakan Peubah Boolean)


 Peubah boolean ketemu diinisialisasi dengan nilai
false.
 Elemen larik L dibandingkan mulai dari elemen ke-k
= 1, 2, …, n. jika L[k] sama dengan X.
 Peubah ketemu diisi dengan harga true dan proses
pembandingan dihentikan.
 Sebaliknya, jika L[k] tidak sama dengan x, peubah
ketemu tetap false nilainya dan proses pembandingan
dilanjutkan untuk elemen berikutnya.
CONTOH PROGRAM SEQUENTIAL SEARCH
#include <iostream>

int sequentialSearch(int arr[], int size, int target) {


for (int i = 0; i < size; ++i) {
if (arr[i] == target) {
return i;
}
} return -1;
}

int main() {
int arr[] = {10, 25, 30, 45, 50, 60};
int size = sizeof(arr) / sizeof(arr[0]);
int target = 45;

int result = sequentialSearch(arr, size, target);


if (result != -1) {
std::cout << "Target ditemukan di indeks " << result << std::endl;

} else {
std::cout << "Target tidak ditemukan dalam array" << std::endl; }

return 0;

}
PENCARIAN BAGIDUA (BINARY SEARCH)
 Pencarian bagidua adalah metode pencarian yang
diterapkan pada sekumpulan data yang sudah
terurut (terurut menaik atau terurut menurun).
 Metode ini digunakan untuk kebutuhan pencarian
dengan waktu yang cepat.
PENCARIAN BAGIDUA (BINARY SEARCH)
 Misalkan indeks kiri adalah i dan indeks kanan adalah j.
pada mulanya, j =1 dan j = N
Langkah 1: Bagi dua elemen larik pada elemen tengah. Elemen
tengah adalah elemen dengan indeks k = (i+j) div 2. (elemen tengah,
L[k], membagi larik menjadi dua bagian, yaitu bagian kiri L[i..j] dan
bagian kanan L[k+1..j])
Langkah 2: Periksa apakah L[k] = X. jika ya, pencarian dihentikan
karena x sudah ditemukan. Tetapi jika L[k] ≠ X, harus ditentukan
apakah pencarian akan dilakukan di larik bagi kiri atau di bagian
kanan. Jika L[k] < X, maka pencarian dilakukan pada larik bagian
kiri. Sebaliknya jika L[k] > X, pencarian dilakukan pada larik bagian
kanan.
PENCARIAN BAGIDUA (BINARY SEARCH)
 Ilustrasi pencarian bagidua:
Misalkan diberikan larik L dengan delapan buah elemen
yang sudah terurt menurun seperti berikut:
PENCARIAN BAGIDUA (BINARY SEARCH)
 Algoritma pencarian bagidua untuk larik terurut
menurun:
procedure bagi_dua1 (input L : larik, input n, x :
integer, output idx : integer)

Deklarasi
i, j : integer { indeks kiri dan
indeks kanan larik }
k : integer { indeks elemen tengah }

ketemu : boolean { true jika ditemukan,


false bila tidak }
CONTOH PROGRAM BINARY SEARCH
#include <iostream>

int binarySearch(int arr[], int left, int right, int target) {


while (left <= right) {
int mid = left + (right - left) / 2;

if (arr[mid] == target) {
return mid;
}
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {10, 25, 30, 45, 50, 60};
int size = sizeof(arr) / sizeof(arr[0]);
int target = 45;
int result = binarySearch(arr, 0, size - 1, target);
if (result != -1) {
std::cout << "Target ditemukan di indeks " << result << std::endl;
} else {
std::cout << "Target tidak ditemukan dalam array" << std::endl;
}

return 0;
}
KELEBIHAN DAN KEKURANGAN

 Kelebihan Sequential Search :


Relatif lebih cepat dan efisien untuk data yg
memiliki jumlah tidak terlalu banyak.
Algoritma pemrogramannya lebih sederhana.
 Kekurangan Sequential Search :

Kurang cepat untuk melakukan pencarian data


dalam jumlah besar.
KELEBIHAN DAN KEKURANGAN
 Kelebihan Binary Search :
Untuk pencarian dalam jumlah banyak (besar), waktu
searching/pencarian lebih cepat karena data telah
terurut.
 Kekurangan Binary Search :

Data harus sudah di-sorting terlebih dahulu (keadaan


terurut) agar lebih mudah dalam pencarian yang
diinginkan.
Algoritma pemrogramannya lebih rumit dari sequential
search.
SEKIAN
TERIMA KASIH :D

You might also like