Fungsi Pencarian Binary Search dan Sequential search
Searching
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 <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. .
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;
}
#include <stdio.h>
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 ko eror ya bro?
BalasHapusmakasih sudah share
BalasHapustimah solder