Pencarian atau searching suatu data pada sekumpulan data
merupakan proses yang sangat penting.
Proses pencarian dilakukan untuk
mengetahui apakah data yang dicari terdapat pada sekumpulan data yang ada.
Selain untuk mengetahui keberadaan data, informasi yang lain yang bisa didapat
adalah letak dari data tersebut. Adapun jenis pencarian yaitu:
Pencarian Bagi Dua (Binary Search)
Pencarian Beruntun (Sequential Search)
Binary Search
Binary search atau pencarian bagi dua adalah salah
satu metode pencarian data salah satu nya Linear Search yang bisa
kalian lihat sendiri pada link disamping ,Binary search mempunyai kelebihan dan
kekurangan bila dibandingkan dengan Linear search , salahn satu nya binary
search pencarian nya lebih cepat tapi agak sedikit susah untuk di mengerti bila
dibandingkan dengan Linear Search yang lumayan simpel .
Sebenarnya binary
Search ini sering kita terapkan pada kehidupan kita sehari - hari . salah
satu contoh nya yaitu , Saat kita mencari kata di kamus maka kita akan membuka
buku itu menjadi dua bagian , dan membuka nya lagi menjadi dua bagian dan
seterus nya sampai ketemu , bagaimana jika kalian ingin mencari suatu kata di
kamus dengan menggunakan metode linear search ? tentu akan sangat lama ,karena
linear search konsep pencarian dengan beruntun dari halaman pertama sampai
terakhir dan sebalik nya secara terurut , jadi tidak mungkin mencari nya dengan
linear search .
Jadi binary search ini sangat dianjurkan untuk digunakan
saat mencari data yang data nya banyak .
Berikut contoh program binary search dalam bahasa C
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int cari,hasil,i,n;
int angka[50];
printf(" Berapa banyak data yang
ingin di inputkan (MAX = 50) : "); scanf("%d",&n);
puts(" Input data ");
i=0;
while(i<n)
{
printf(" data
ke - %d = ",i+1); scanf("%d",&angka[i]);
i++;
}
printf(" Berapa angka yang ingin
dicari : "); scanf("%d",&cari);
hasil = biner(cari,n,angka);
if(hasil==-1)
{
puts("\n
Data tidak ditemukan \n");
}
else
{
printf("
Angka %d ada di indeks ke %d ",cari,hasil+1);
}
getch();
return 0;
}
int biner(int cari, int n, int angka[])
{
//variabel untuk menentukan titik
awal, akhir nya
int i,awal,tengah,akhir,ketemu;
akhir=n-1;
awal=0;
ketemu=-1;
i=0;
//perulangan untuk mencari angka nya
dengan kondisi ketemu = -1 dan i < n
while(ketemu==-1 && i < n)
{
tengah=(awal+akhir)/2;
/**
*Perkondisian
data yang di tengah = cari/ketemu dan
pencarian di hentikan karena ketemu = tengah bukan ketemu - -1
jadi
tidak memenuhi syarat untuk melakukan perulangan lagi
*dan ketemu
= tengah , jadi nilai yang di kembalikan ke main nanti
adalah indeks ke - tengah/indeks tempat data yang dicari ditemukan
**/
if(angka[tengah]==cari)
{
ketemu=tengah;
}
else
{
if(angka[tengah]<cari)
{
awal=tengah+1;
}
else
{
akhir=tengah-1;
}
i++;
}
ketemu++;
}
}
Langkah 1 : Bagi dua elemen larik pada elemen tengah .Elemen
tengah adalah elemen dengan indeks tengah = ( awal + akkhir ) / 2 . (
elemen tengah , data[tengah] , membagi larik menjadi dua bagian ,yaitu bagian
kiri dan bagian kanan )
Langkah 2 : Periksa apakah data[tengah] = cari . jika data[tengah] = cari maka pencarian selesai ,sebab cari sudah ditemukan dan syarat penrulangan dari WHILE nya sudah tidak terpenuhi .Tetapi , jika tidak ditemukan ,maka harus ditentukan apakah pencarian akan dilakukan di larik bagian kiri atau di bagian kanan . Jika data[tengah] < cari . maka pencarian akan dilakukan dibagian kiri ,sebalik nya jika data[tengah] > cari , maka pencarian akan dilakukan dari sebelah kanan. .
Langkah 3 : Ulangi langkah 1 hingga cari ditemukan atau i > n atau larik sudah nol .
Oh iya sebelum kita menulis syintax nya maka sebelum nya data yang harus di cari harus lah terurut , misal : 10 , 20 , 30 , 40 ,50 dst . Jika data tidak terurut maka data harus diurutkan dulu dengan sorting. .
Langkah 2 : Periksa apakah data[tengah] = cari . jika data[tengah] = cari maka pencarian selesai ,sebab cari sudah ditemukan dan syarat penrulangan dari WHILE nya sudah tidak terpenuhi .Tetapi , jika tidak ditemukan ,maka harus ditentukan apakah pencarian akan dilakukan di larik bagian kiri atau di bagian kanan . Jika data[tengah] < cari . maka pencarian akan dilakukan dibagian kiri ,sebalik nya jika data[tengah] > cari , maka pencarian akan dilakukan dari sebelah kanan. .
Langkah 3 : Ulangi langkah 1 hingga cari ditemukan atau i > n atau larik sudah nol .
Oh iya sebelum kita menulis syintax nya maka sebelum nya data yang harus di cari harus lah terurut , misal : 10 , 20 , 30 , 40 ,50 dst . Jika data tidak terurut maka data harus diurutkan dulu dengan sorting. .
Sequential Search
Pencarian Sekuensial / Sequensial Search sering disebut
dengan pencarian linear yang merupakan metode pencarian yang paling sederhana.
Pencarian Sekuensial menggunakan prinsip data yang ada dibandingkan satu per
satu secara berurutan dengan data yang dicari sampai data tersebut ditemukan
atau tidak ditemukan.
Teknik pencarian ini (Sequensial Search) biasah diterapkan
dalam Array untuk menelusuri semua elemen array dari awal
sampai akhir, misal digunakan dalam melakukan pencarian nilai tertinggi dalam
kumpulan data (elemen) yang ada dalam Array atau digunakan dalam mecari posisi
sebuah bilangan (misal angka 16) dalam kumpulan data yang ada dalam Array.
Berikut Contoh Program Pencarian Bilangan (dengan Array 1
dimensi)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[100],b,c,d,umpan=0;
printf("===========================================================\n");
printf("=== Program Pencarian Bilangan
(dengan Array 1 dimensi) ===\n");
printf("===========================================================\n\n");
printf("Masukkan berapa bilangan yang
ingin di input: "); scanf("%d",&b);
printf("\n");
for(c=0;c<b;c++)
{
printf("Masukkan
bilangan ke %d: ",c+1); scanf("%d",&a[c]);
}
printf("\nMasukkan bilangan yang di
cari: "); scanf("%d",&d);
for(c=0;c<b;c++)
{
if(a[c]==d)
{
printf("\nData Ada, berada di Index Array ke: %d atau berada di urutan ke:
%d\n",c,c+1);
break;
}
else
{
umpan=umpan+1;
}
}
if(umpan==b)
{
printf("\nData
Tidak Ada\n");
}
getch();
return 0;
}