Struktur Data
Rahmad Firdaus, S.Kom., M.TI
2 (Searching) / Pencarian :
1. Sequential Search
2. Binary Search
2
Searching
◎ Pada suatu data seringkali dibutuhkan pembacaan kembali informasi
(retrieval information) dengan cara searching.
◎ Searching adalah pencarian data dengan cara menelusuri data-data
tersebut.
◎ Tempat pencarian data dapat berupa array dalam memori, bisa juga
pada file pada external storage.
3
Sequential Search
◎ Adalah suatu teknik pencarian data dalam array ( 1 dimensi ) yang akan
menelusuri semua elemen-elemen array dari awal sampai akhir, dimana
data-data tidak perlu diurutkan terlebih dahulu.
◎ Kemungkinan terbaik (best case) adalah jika data yang dicari terletak di
indeks array terdepan (elemen array pertama) sehingga waktu yang
dibutuhkan untuk pencarian data sangat sebentar (minimal).
◎ Kemungkinan terburuk (worst case) adalah jika data yang dicari terletak
di indeks array terakhir (elemen array terakhir) sehingga waktu yang
dibutuhkan untuk pencarian data sangat lama (maksimal).
4
Sequential Search
◎ Misalnya terdapat array satu dimensi sebagai berikut:
0 1 2 3 4 5 6 7
indeks
8 10 6 -2 11 7 1 100 value
alamat
ffea ffeb ffec ffed ffef fffa fffb fffc
5
Detail Program
#include <stdio.h>
#include <conio.h>
void main(){
clrscr();
int data[8] = {8,10,6,-2,11,7,1,100};
int cari;
int flag=0;
printf("masukkan data yang ingin dicari = ");
scanf("%d",&cari);
for(int i=0;i<8;i++){
if(data[i] == cari) flag=1;
}
if(flag==1) printf("Data ada!\n");
else printf("Data tidak ada!\n");
}
6
Pembahasan Program
8
Sequential Search with Sentinel
◎ Perhatikan array data berikut ini:
0 1 2 3 4 5 6 indeks
3 12 9 -4 21 6 value
alamat
ffea ffeb ffec ffed ffef fffa fffb
◎ Terdapat 6 buah data dalam array (dari indeks 0 s/d 5) dan terdapat 1
indeks array tambahan (indeks ke 6) yang belum berisi data (disebut
sentinel)
◎ Array pada indeks ke 6 berguna untuk menjaga agar indeks data berada
pada indeks 0 s/d 5 saja. Bila pencarian data sudah mencapai array
indeks yang ke-6 maka berarti data TIDAK ADA, sedangkan jika
pencarian tidak mencapai indeks ke-6, maka data ADA.
9
Program
#include <stdio.h>
#include <conio.h>
void main(){
clrscr();
int data[6] = {3,12,9,-4,21,6};
int cari,i;
printf("masukkan data yang ingin dicari = ");
scanf("%d",&cari);
data[6] = cari;
i=0;
while(data[i] != cari)
i++;
if(i<6)
printf("Data ada!\n");
else
printf("Data tidak ada!\n"); 10
Sequential Search
11
Binary Search
◎ Data yang ada harus diurutkan terlebih dahulu berdasarkan suatu urutan tertentu
yang dijadikan kunci pencarian.
◎ Adalah teknik pencarian data dalam dengan cara membagi data menjadi dua
bagian setiap kali terjadi proses pengurutan.
◎ Prinsip pencarian biner adalah:
○ Data diambil dari posisi 1 sampai posisi akhir N
○ Kemudian cari posisi data tengah dengan rumus (posisi awal + posisi akhir) /
2
○ Kemudian data yang dicari dibandingkan dengan data yang di tengah,
apakah sama atau lebih kecil, atau lebih besar?
○ Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah
posisi tengah + 1
○ Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah
posisi tengah – 1
○ Jika data sama, berarti ketemu.
12
Algoritma
int binarySearch(LIST t[], int n, int val)
{
int left, right, mid;
left = 0; right = n-1;
while(left<=right) {
mid=(left+right)/2;
if (val<t[mid].key)
right=mid-1;
else if (val>t[mid].key)
left=mid+1;
else
return mid; /* found */
}
return -1; /* not found */
} 13
Binary Search
◎ ALGORITMA PENCARIAN BINER (BINARY SEARCH)
• untuk sebuah berkas dengan record yang sudah diurutkan, jumlah probe yang
diperlukan untuk membaca sebuah record dapat di usahakan untuk diperkecil
dengan menggunakan teknik pencarian biner.
• Jika key (cari) < Key (tengah), Maka bagian berkas mulai dari Key (tengah) sampai
akhir dari berkas akan dieliminasi.
• Sebaliknya jika Key (cari) > Key (tengah), Maka bagian berkas mulai dari depan sama
dengan Key (tengah) dieliminasi.
14
Algoritma 2
ALGORITMA PENCARIAN BINER (lanjt)
Proc pencrian biner
/* n buah rekaman dalam berkas diurutkan menak menaik menurut kunci rekaman */
Awal := 1
Akhir := n
While AWAL < AKHIR do
Tengah := [(Awal + Akhir) / 2]
If kunci (cari) = kunc (tengah)
Pencaran berakhir
else if kunci (cari) > kunci (tengah)
AWAL := TENGAH + 1
else
AKHIR := TENGAH -1
end
Rekaman tidak ditemukan
End pencarian biner 15
Binary Search
16
Pecarian Bilangan 13
17
Pecarian Bilangan 17
18
Pecarian Bilangan 17
19
Contoh Soal
1 3 8 16 32 38 39 40 45 65
20
Contoh Soal
Nama Mahasiswa NIP Fakultas Jurusan Dosen Pembimbing SPP Data-lain
Akhmad 0235 Teknik Geodesi Herman,Ir 450.000
Budiani 0154 Teknik Sipil Slamet,Ir 500.000
21
Tetap
Semangat
Belajar
See u next
week…..
22
Thanks!
Any questions?
You can find me at:
rahmadfirdaus@umri.ac.id -
081367105145
23