Program Pencarian (Binary Search) Bahasa C

Program pencarian (Binary Search) dengan mencari indeks angka yang ada di dalam array. Pencarian indeks data pada program ini menggunakan binary search, dan syarat untuk mencari angka dengan binary search yaitu data harus terurut maka pengurutan pada program ini menggunakan Quick Sort.

Random data tersedia juga dalam program dan penghitung total waktu yang dibutuhkan dalam random dan quick sort. Program menerima input berupa n yaitu sebuah bilangan dimana 1 < n < 100.000. Dan kemudian mengacak n buah bilangan bulat.

Binary Search C
Program Pencarian (Binary Search) Bahasa C

Program menyediakan MENU dan melakukan hal-hal berikut:
Masukkan jumlah bilangan (n) :
> Random data dalam array selesai
> Urutkan data menggunkan quick sort

> Total penghitung waktu Random & Quick Sort adalah x.xxxxx detik

Pilihan:
1) Mencari data dengan BINARY SEARCH dan menampilkan hasilnya
2) Random ulang data dalam array
3) Selesai

Pilihan Anda : _

Bila pilihan yang dimasukkan yaitu 1 maka user memasukkan sebuah bilangan yang ingin dicari dan kemudian program menampilkan hasilnya, bila data yang dicari ditemukan maka pesan muncul bahwa data ditemukan pada indeks i ditampilkan dilayar monitor. Sebaliknya bila data yang dicari tidak ditemukan maka muncul pesan data tidak ditemukan. Waktu pencarian juga ditampilakan di layar monitor.


Bila pilhan yang dimasukkan yaitu 2 maka program menunggu input kembali n bilangan dan mengacak kembali data sebanyak n ke dalam array.

Bila pilihan yang dimasukkan yaitu 3 maka program selesai.

Source Code Program:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/times.h>

//--- Prototype ---
  void QuickSort(int *, int, int);
   int BinarySearch(int *, int, int);
    int startTiming(void);
     int stopTiming(void);
      float timingDuration(void);

//------- Struct Untuk Function Timing -------
static struct tms _start; 
static struct tms _stop;

//------- Function Quick Sort --------
 void QuickSort(int ArrBil[],int first,int last){
   int pivot,j,temp,i;

   if(first<last){
      pivot=first;
   i=first;
   j=last;

 while(i<j){
   while(ArrBil[i]<=ArrBil[pivot]&&i<last) i++; //too big index
      while(ArrBil[j]>ArrBil[pivot]) j--; //too small index
        if(i<j){ //tukar nilai jika too big index < too small index
         temp=ArrBil[i];
         ArrBil[i]=ArrBil[j];
         ArrBil[j]=temp;
  }
 }

 //--- tukar nilai ---
 temp=ArrBil[pivot];
 ArrBil[pivot]=ArrBil[j];
 ArrBil[j]=temp;
 QuickSort(ArrBil,first,j-1);
 QuickSort(ArrBil,j+1,last);

    }
}

//--------- Function Binary Search ---------
int BinarySearch(int *ArrBil, int bil, int bilCari){
int low=0, high=bil-1, mid;
  while(low<=high){
    mid=(low+high)/2; /*index tengah*/
      if(bilCari<ArrBil[mid]) high=mid-1;
        else if(bilCari>ArrBil[mid]) low=mid+1;
          else return mid; /*nilai ditemukan*/  
     }
 return -1; /*nilai tidak ditemukan*/
}


//-------- Function Timing --------
/* Fungsi Timing Start  */
  int startTiming(void) {
    times(&_start);
    return 1;
  }

/* Fungsi Timing Stop */
int stopTiming(void) {
 times(&_stop);
 return 1;
}

/* Fungsi Menghitung total durasi */
float timingDuration(void) {
    return (_stop.tms_utime - _start.tms_utime);
}


int main(){
  int i, pilihan, bil, *ArrBil, bilCari;
  
printf("\nMasukkan Jumlah Bilangan (n) : ");
  scanf("%d", &bil);

//--- Membatasi nilai inputan ---
if(bil>100000){
while(bil>100000){
  printf("\nJumlah bilangan (n) hanya berada pada 1 < n <= 100000");
    printf("\nMasukkan Jumlah Bilangan (n): ");
      scanf("%d", &bil);
 }
}

ArrBil=(int *) malloc(bil * sizeof(int));
  startTiming(); /*mulai hitung waktu*/ 
  
  //-------- Random data dalam array --------
  for(i=0; i<bil; i++){
    ArrBil[i]=(rand() % bil+1);
  }
  printf("> Random data dalam array selesai\n");

  //--- Urutkan data dengan metode Quick Sort ---
  QuickSort(ArrBil, 0, bil-1);
    stopTiming(); /*stop hitung waktu*/

  printf("> Urutkan data menggunakan quick sort\n");
  printf("\n> Total penghitungan waktu Random & Quick Sort adalah %f detik\n", timingDuration() * 1e-2);  
         
 
  while(pilihan!=3){
    printf("\nPilihan : \n");
      printf("1) Mencari data dengan BINARY SEARCH dan menampilkan hasilnya\n");
 printf("2) Random ulang data dalam array\n");
        printf("3) Selesai\n");
      printf("\n  Pilihan anda : ");
    scanf("%d", &pilihan);
  getchar();
  
 switch(pilihan){   
  case 1 :    
   printf("\n\t.:: Binary Search ::.\n");
   printf("Masukkan bilangan yang ingin di cari : ");
   scanf("%d", &bilCari);
   startTiming(); /*mulai hitung waktu*/  

   //--------- Binary Search ---------
   int BS=BinarySearch(&ArrBil[0], bil, bilCari);
   
   if(BS==-1){ /*cek nilai yang di return */
       printf("-=( Nilai %d yang dicari tidak ditemukan )=-\n", bilCari);
   }else 
       printf("-=( Nilai %d yang dicari ditemukan pada indeks ke-%d )=-\n", bilCari, BS);
   stopTiming(); /*stop hitung waktu*/    
   printf("\nTotal penghitungan waktu Binary Search adalah %f detik\n", timingDuration() * 1e-2);  ; 
   break;

  case 2 :
   printf("\nMasukkan Jumlah Bilangan Baru (n) : ");
   scanf("%d", &bil);
   if(bil>100000){
   while(bil>100000){
     printf("\nJumlah bilangan (n) hanya berada pada 1 < n <= 100000");
       printf("\nMasukkan Jumlah Bilangan BinarySearch (n): ");
         scanf("%d", &bil);
    }
   }
   ArrBil=(int *) malloc(bil * sizeof(int));
     startTiming(); /*mulai hitung waktu*/ 

   //-------- Random data dalam array --------
     for(i=0; i<bil; i++){
       ArrBil[i]=(rand() % bil+1);
     }
     printf("> Random data dalam array selesai\n");

   //--- Urutkan data dengan metode Quick Sort ---
     QuickSort(ArrBil, 0, bil-1);
       stopTiming(); /*stop hitung waktu*/
     printf("> Urutkan data menggunakan quick sort\n");
     printf("\n> Total penghitungan waktu Random & Quick Sort adalah %f detik\n", timingDuration() * 1e-2); 
   break;
 
  case 3 : 
   printf("\n ---== Anda out dari Program ==---\n\n");
   break;

  default : 
   printf("\n ---== Input Salah :: Masukkan pilihan hanya 1 s/d 2 ==---\n");
   break;
  }
 }
   return EXIT_SUCCESS;
}

Demo program:
Run Binary Search C
Run Program Binary Search

Demikian lah pembahasan program pencarian (Binary Search) bahasa C. Silahkan kembangkan program di atas jika masih ada yang kurang. Program tersebut telah saya compile dan berhasil tanpa ada syntak error maupun warning.

Artikel Lainnya:

2 Responses to "Program Pencarian (Binary Search) Bahasa C"

  1. keren bnget artikelnya mas bro .. koment back yh di www.haztak21.blogspot.com <-- ingatt berbagi itu indahloh kawandd

    ReplyDelete

Komentar Anda sangat berharga untuk kemajuan blog ini.
Silahkan berkomentar sesuai postingan blog & berkomentarlah dengan sopan.
- Dilarang menaruh live link di komentar.
- Komentar SPAM atau jualan mohon maaf akan dihapus.