Rabu, 19 Juli 2017

FUNGSI PENCARIAN BINARY SEARCH DAN SEQUENTIAL SEARCH

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;
}


1 komentar: