Anda di halaman 1dari 13

Modul Praktikum Struktur Data

SEARCHING ARRAY
Sesuai dengan judulnya, dalam modul ini kita akan membahas proses
pencarian / searching data pada suatu array / barisan data. Jika diketahui ada sebuah
array / barisan data bernama A yang menampung 10 data yang bertipe integer sbb
A={1,2,3,4,8,5,7,9,6,0} dan kita diberi tugas untuk mencari beberapa data misal:
Jika data yang akan dicari dalam array A adalah 6, maka dengan cepat dapat
kita ketahui bahwa data 6 ada dalam array A pada index ke-9 (index pada
array dimulai dari 0).
Sedangkan jika data yang akan dicari dalam array A adalah 12, maka dapat
disimpulkan bahwa array A tidak memiliki data 12 tersebut.
Nah, kita sudah memahami proses pencarian data yang sederhana tersebut
dalam

pikiran

kita,

sekarang

permasalahannya

adalah

bagaimana

mengimplementasikannya kedalam program ?.


Pada umumnya dikenal dua metode searching antara lain : Sequensial search dan
binary search, Untuk lebih memahami kedua metode ini lebih baik kita mulai dari
metode yang paling sederhana terlebih dahulu yaitu sequensial search.
Sequensial search
Disebut juga sebagai metode pencarian urut adalah metode pencarian yang
paling mudah. Bayangkan saja jika anda dihadapkan pada sebuah rak buku, dan anda
diberi tugas untuk mencari sebuah buku dari rak tersebut. Sudah tentu anda akan
mulai mencarinya satu persatu entah itu dari atas atau dari bawah sampai buku yang
dimaksud ketemu.
Singkatnya sequential search memiliki proses sebagai berikut:

Tentukan banyaknya data yang akan di olah, missal banyak data adalah N.

Tentukan data apa yang akan dicari, missal data yang akan dicari adalah C.

Deklarasikan sebuah counter untuk menghitung banyak data yang ditemukan,


missal counternya adalah K.

Inisialisasikan K =0

Lakukanlah perulangan sebanyak N kali

Dalam tiap proses perulangan tersebut periksalah apakah data yang sedang

STMIK Mercusuar 2010

Modul Praktikum Struktur Data


diolah sama dengan data yang dicari.

Jika ternyata sama K=K+1

Jika tidak, lanjutkan proses perulangan .

Setelah proses perulangan berhenti, periksalah nilai K.

Jika nilai K lebih dari 0, artinya data yang dicari ada dalam data /array dan
tampilkan nilai K ke layer sebagai jumlah data yang ditemukan.

Jika nilai K=0, artinya data yang dicari tidak ditemukan dalam data / array dan
tampilkan ke layar bahwa data tidak ditemukan

Proses selesai.
Dapat disimpulkan bahwa sequential search, akan mencari data dengan

cara membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu


saja akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah
banyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja.

STMIK Mercusuar 2010

Modul Praktikum Struktur Data

Coding Program - Sequential Search


#include<stdio.h>
void main()
{
//deklarasi variabel
int A[10],index[10], i,j,k;
//proses penginputan data
for(i=0;i<10;i++)
{
printf("Data ke-%d:",i+1);
scanf("%d",&A[i]);
}
//memasukkan data yang akan dicari ke dalam K
printf("Masukkan data yang akan anda cari:");
scanf("%d",&k);
//proses pencarian data
j=0;
for (i=0;i<10;i++)
{
if(A[i]==k)
{
index[j]=i;
j++;
}
}
//jika data ditemukan dalam array
if (j>0)
{
printf("Data %d yang dicari ada %d buah\n",k,j);
printf("Data tersebut terdapat dalam index ke :");
for(i=0;i<j;i++)
{
printf(" %d ",index[i]);
}
printf("\n");
}
//jika tidak ditemukan
else
{
printf("Data tidak ditemukan dalam array\n");
}
}

GAMBARAN KERJA
Pada program diatas jumlah data yang akan diolah berjumlah 10 data dan
disimpan kedalam array A[10] yang bejenis integer, array index[10] digunakan untuk
mencatat index pada array A dimana data ditemukan daya tampung array sama
dengan array A karena ada kemungkinan data yang akan dicari adalah semua data
yang ada dalam array A. sedangkan variable I digunakan sebagai counter dalam
proses perulangan, variable j digunakan sebagai counter untuk menghitung jumlah

STMIK Mercusuar 2010

Modul Praktikum Struktur Data


data yang ditemukan dan variable k digunakan untuk menyimpan data yang akan
dicari.
Proses pertama adalah memasukkan data-data yang akan diolah ke dalam
array A dan data yang akan dicari ke dalam variable K. setelah itu akan dilakukan
perulangan sebanyak data yang ada dalam array A untuk mencari apakah ada data
dalam variable K didalam array A, jika ada maka counter j akan mencatat jumlahnya
dan array index akan mencatat pada index ke berapa data tersebut ditemukan. Setelah
proses perulangan selesai, tampilkanlah hasil yang terdapat pada variable j dan array
index ke layer.
Gambaran kerja program (Perhatikan koding diatas agar lebih jelas)
Misalkan pada perulangan yang pertama kita masukkan data sebagai berikut:
Array A (berisi data yang akan diolah)
ISI
1
INDEX 0

3
1

5
2

8
3

6
4

5
5

7
6

11
7

9
8

0
9

5
5

7
6

11
7

9
8

0
9

Data yang akan dicari K=5


Proses pencarian / proses perulangan yang kedua
Array A (berisi data yang akan diolah)
ISI
1
INDEX 0

3
1

5
2

8
3

6
4

Data ditemukan ketika i = 2


Maka K++ menjadi 1, artinya ada 1 data dalam array A
Array index akan menyimpan index tempat data tersebut ditemukan pada array A
Array index (berisi index data yang ditemukan pada array A)
ISI
2
INDEX 0

Data ditemukan ketika i = 5


Maka K++ menjadi 2, artinya ada 2 data dalam array A
Array index akan menyimpan index tempat data tersebut ditemukan pada array A
Array index (berisi index data yang ditemukan pada array A)

STMIK Mercusuar 2010

Modul Praktikum Struktur Data


ISI
2
INDEX 0

5
1

Proses pencarian data selesai dan tampilkan hasil output


Data 5 yang dicari ada 2 buah ambil dari variable K
Data tersebut terdapat dalam index ke: 2 5 ambil dari array index.
Binary search
Proses pencarian binary search hanya dapat dilakukan pada kumpulan data
yang sudah diurutkan terlebih dahulu. Jika terdapat N buah data yang akan dolah,
data yang dicari akan dibandingkan dengan data ke-N jika data ke-N lebih besar dari
data yang dicari maka akan dilakukan pembagian data menjadi dua bagian. Kemudian
ujung data pada setiap bagian dibandingkan lagi dengan nilai yang akan dicari.

STMIK Mercusuar 2010

Modul Praktikum Struktur Data


Coding Program Binary Search
#include<stdio.h>
void main()
{
//deklarasi variabel
int A[10], i,j,k,tkr,top,bottom,middle,tm;
//proses penginputan data
for(i=0;i<10;i++)
{
printf("Data ke-%d:",i+1);
scanf("%d",&A[i]);
}
printf("Masukkan data yang akan anda cari:");
scanf("%d",&k);
//proses pengurutan data
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if (A[i]>A[j])
{
tkr=A[i];
A[i]=A[j];
A[j]=tkr;
}
}
}
//proses pencarian data
tm=0;
top=9;
bottom=0;
while(top>=bottom)
{
middle=(top+bottom)/2;
if(A[middle]==k)
{
tm++;
}
if(A[middle]<k)
{
bottom=middle+1;
}
else
{
top=middle-1;
}
}
if (tm>0)
{
printf("Data %d yang dicari ada dalam array\n",k);
}
//jika tidak ditemukan
else
{
printf("Data tidak ditemukan dalam array\n");
}
}

STMIK Mercusuar 2010

Modul Praktikum Struktur Data


Contoh kasus:
Ada 12 data 11 13 15 18 23 27 29 31 54 58 59 61
Data yang akan dicari : 13

Proses 1
11 13 15 18 23 27 29 31 54 58 59 61 lebih besar dengan data yg akan
dicari , lakukan pembagian data

Proses 2
11 13 15 18 23 27 lebih besar dari data yang dicari, bagi 2 29 31 54 58
59 61

Proses 3
11 13 15 lebih besar dari data yang dicari, bagi 2 18 23 27 29 31 54 58
59 61

Proses 4
11 lebih kecil dari data yang dicari, abaikan saja 13 15 lebih besar
dari data yang dicari, bagi 2 18 23 27 29 31 54 58 59 61

Proses 5
13 sesuai data yang dicari

11

15 lebih besar dari data yang

dicari 18 23 27 29 31 54 58 59 61
Dari proses diatas dapat disimpulkan bahwa binary search akan membagi-bagi
sekumpulan data menjadi 2 bagian sampai data yang dicari ditemukan.

Kesimpulan
Sequential search lebih efektif jika digunakan pada sekumpulan data yang sedikit,
sedangkan binary search efektif jika digunakan pada sekumpulan data yang berjumlah
banyak.
Sequential search dapat digunakan pada sekumpulan data yang urut ataupun tidak
urut, sedangkan binary search harus pada data yang sudah urut.

STMIK Mercusuar 2010

Modul Praktikum Struktur Data


Interpolation search
Proses pencarian data ini hampir sama dengan proses pencarian binary search,
pencarian ini juga dilakukan pada kumpulan data yang sudah urut. Akan tetapi jika
pada binary search kita membagi data menjadi 2 bagian tiap prosesnya, pada
interpolation search kita akan membagi data menurut rumus sebagai berikut:
Posisi = ( kunci data[low] / data[high] data[low] ) * ( high low ) + low
Singkatnya proses pencarian interpolation search hampir mirip dengan proses
pencarian kata dikamus, yaitu kita mencari data yang dimaksud dengan cara
memperkirakan letak data.
Misal terdapat data sebagai berikut:
Kode

Judul

Buku Pengarang

025

The C++ Programming

James Wood

034

Mastering Delphi 6

Marcopolo

041

Professional C#

Simon Webe

056

Pure JavaScript v2

Michael Bolton

063

Advanced JSP & Servlet

David Dunn

072

Calculus Make it Easy

Gunner Christian

088

Visual Basic 2005 Express

Antonie

096

Artificial Life : Volume 1

Gloria Virginia

Kunci Pencarian ? 088


Low ? 0
High ? 7
Posisi = (088 - 025) / (096 - 025) * (7 - 0) + 0 = [6]
Kunci[6] = kunci pencarian, data ditemukan : Visual Basic 2005
Kunci Pencarian ? 060
Low ? 0
High ? 7
Posisi = (060 025) / (096 025) * (7 0) + 0 = [3]
Kunci[3] < kunci pencarian, maka teruskan
STMIK Mercusuar 2010

Modul Praktikum Struktur Data


Low = 3 + 1 = 4
High = 7
Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060.
Berarti tidak ada kunci 060.

STMIK Mercusuar 2010

Modul Praktikum Struktur Data


Coding Program Interpolation Search
#include<stdio.h>
void main()
{
//deklarasi variable
int A[10], i,j,k,tkr,low,high,pos,tm;
//proses penginputan data
for(i=0;i<10;i++)
{
printf("data ke-%d:",i+1);
scanf("%d",&A[i]);
}
//Input data yang akan dicari
printf("Masukkan data yang akan anda cari:");
scanf("%d",&k);
//proses pengurutan data
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if (A[i]>A[j])
{
tkr=A[i];
A[i]=A[j];
A[j]=tkr;
}
}
}
//proses pencarian data
tm=0;
high=9;
low=0;
do
{
pos = ((k - A[low]) / (A[high] - A[low]))*(high-low)
+ low;
if (A[pos] == k)
{
tm++;
break;
}
if (A[pos] > k)
high = pos-1;
else
if (A[pos] < k)
low = pos + 1;
}
while(k >= A[low] && k <= A[high]);
if (tm>0)
{
printf("data %d yang dicari ada dalam array\n",k);
}
//jika tidak ditemukan
else
{
printf("data tidak ditemukan dalam array\n");
}
}

STMIK Mercusuar 2010

10

Modul Praktikum Struktur Data


Array Splice/Explode
Secara harafiah, dapat diartikan sebagai metode untuk memecah-mecah array.
Pemecahan array itu sendiri, tergantung berdasarkan apa array akan dipecah. Agar
lebih jelas, lihat ilustrasi array splice pada gambar berikut :
Char
Indeks
Char
Indeks1
Indeks2

P
0

A
1
P
0
0

K
2
A
0
1

3
K
0
2

A
4

N
5
A
1
0

T
6
N
1
1

O
7
T
1
2

N
8
O
1
3

N
1
4

Ada pemecahan dari array of character 1 dimensi menjadi array of character 2


dimensi berdasarkan spasi pada inputan stringnya.
Coba coding array explode dan searchingnya berikut ini :

STMIK Mercusuar 2010

11

Modul Praktikum Struktur Data


#include <stdio.h>
#include <string.h>
void main()
{
char str[100],cari[100];
char hasil[100][100];
int n,i,j,t,a,b,c,d,e;
printf("Masukkan string: ");
gets(str);
n=strlen(str);
j=0;
for(i=0;i<n;i++)
{
if (i!=(n-1))
{
if(str[i]==32)
j++;
}
else if(i==(n-1))
j++;
}
t=0;
for(i=0;i<j;i++)
{
e=0;
for(a=t;a<n;a++)
{
if(str[a]!=32)
{
hasil[i][e]=str[a];
printf("Indeks [%d][%d] = %c\n",i,e,hasil[i]
[e]); //untuk melihat hasil splice
e++;
}
else
{
t=a+1;
break;
}
}
printf("\n");
}
printf("Kata yang ingin dicari : ");
gets(cari);
b=strlen(cari);
printf("Panjang kata cari %i\n",b);
c=-1;
d=0;
for(i=0;i<j;i++)
{
t=e=0;
for(a=0;a<n;a++)
{
if(hasil[i][a]<=0 && cari[e]<=0)
break;
else
{
if(cari[e]==hasil[i][a])
t++;
}
e++;
}
if(t==b)
{
c=i;
break;
}

}
if(c!=-1)
{
printf("Kata %s yang dicari ada di indeks [%d][%d] sampai [%d]
[%d]\n",cari,c,0,c,a-1);
}
else
printf("Kata tidak ada dalam string!\n");
}

STMIK Mercusuar 2010

12

Modul Praktikum Struktur Data


Pengembangan:
Ganti coding program diatas agar array yang ada bisa ditentukan ukurannya oleh
user (array dinamis) [gunakan template program yang telah ada]
Buat menu searching untuk menggabungkan ketiga metode searching tersebut.
Dibuat dalam bentuk fungsi!
Buat array explode untuk memecah input NIM menjadi seperti berikut:
Input = 22053752
Output = 22 05 3752 (dipisah berdasarkan kode jurusan, angkatan dan nomor
mahasiswa)

Soal:
Buat array rekening bank dengan ketentuan :
- Gunakan Struct (int no_rek, char nama[100], long saldo)
Buatlah fungsi-fungsi sebagai berikut :
- Add
- Edit
- Cari (Sequential)
- Setor
- Ambil
- Transfer
- Tutup Rekening (Delete)

STMIK Mercusuar 2010

13

Anda mungkin juga menyukai