Langsung ke konten utama
Pencarian Biner (Binary Search)
Pada algoritma pencarian biner, data sudah dalam keadaan terurut (untuk mudahnya diasumsikan urut naik). Contoh dalam kehidupan sehari-hari, seperti orang mencari nomor telepon pada buku telepon. Setiap kali pencarian, kunci akan selalu dibandingkan dengan data yang berada di tengah (middle), bila sama berarti data ketemu, bila tidak, akan “dilihat” apakah data ada di sebelah “kiri” (artinya data lebih kecil dari data di tengah) atau di sebelah “kanan” (artinya data lebih besar dari data di tengah). Bila data ada di sebelah kiri, dilakukan pencarian dengan cara yang sama (sementara data yang berada di sebelah kanan akan diabaikan). Jadi, setiap kali pencarian, data selalu “dibelah” menjadi dua bagian (biner), sampai pada “titik tertentu” (bila sama dengan titik tengah, pencarian tidak dilakukan lagi, bila tidak, sampai pada perbandingan terakhir data juga tidak sama, berarti data tidak ditemukan pada array aray).

Berikut adalah algoritmanya:

function pencarianBiner(input aray : larik; kunci, low, high : integer) : integer
Deklarasi
ketemu : boolean i, middle : integer
Deskripsi
ketemu  false
while (low <= high) and (not ketemu) do middle  (low+high) div 2
if (kunci = aray[middle]) then ketemu  true { data pencarian = data di tengah } else if (kunci < aray[middle]) then high  middle – 1 {data akan dicari lagi di sebelah kiri} else low  middle + 1 {data akan dicari lagi di sebelah kanan} endif
endwhile
if ketemu then pencarianBiner := middle else pencarianBiner := -1;
endif


berikut adalah pemrogramannya
#include <iostream>

using namespace std;

int funcbinary (int data[], int n, int k)
{
 int atas,bawah,tengah,posisi;
 bool ada;

 ada    = false;
 bawah  = 0;
 atas   = n - 1;
 posisi = -1;

 while (bawah <= atas)
 {
  tengah = (atas + bawah) / 2;
  if (k == data[tengah])
  {
   posisi = tengah;
   break;
  }
 else if (k < data[tengah]) atas = tengah - 1;
 else if (k > data[tengah]) bawah= tengah + 1;
 }
 return posisi;
}

int main ()
{
 int kk;
 cout << "INPUT ANGKA : "; cin >> kk;
 int n         = 10;
 int data[] = {21,31,48,52,64,78,87,92,105,170};
 int k      = kk;

 int posisi = funcbinary (data,n,k);

 if (posisi != -1)
 {
  cout << "ANGKA " << k << " ditemukan pada indeks ke-" << posisi << endl;
 }
 else
 {
  cout << "ANGKA " << k << " tidak ditemukan" << endl;
 }
 return 0;
}



Komentar

Postingan populer dari blog ini

SEKUEN       S ekuen adalah sederetan pernyataan-pernyataan yang urutan dan pelaksanaan eksekusinya runtut, yang lebih dahulu ditemukan akan dikerjakan terlebih dahulu. Bila urutan pernyataan dibalik, akan mempunyai makna yang berbeda. Dilihat dari cara kerjanya, atau tugas yang dikerjakannya, , ada tiga macam atau tiga kategori pokok komponen instruksi dalam algoritma, yaitu :Assignment Statement, Input / Output Statement, dan Control Statement. yang maish dapat ditambahkan satu macam lagi yaitu Call Statement, dan return Statement. Tapi bila dilihat dari struktur alur atau urutan pelaksanaan instruksi untuk ketiga komponen diatas, bagaimana mereka tersusun atau terangkai menjadi suatu algoritma, atau program sedemikian rupa sehingga akan terbentuk tiga macam struktur flow yaitu : 1. Sequential flow, (aliran yang dikerjakan urut sesuai urutan penulisan ) 2. Branch flow, (aliran yang melakukan pencabangan) – Uncoditional Branch flow, – Conditional Branch flo...
REKURSIF    Rekursif   adalah fungsi yang mengembalikan nilai dirinya sendiri atau juga dapat diartikan fungsi yang memanggil dirinya sendiri. Nah sebagai contoh kali ini, saya akan memaparkan fungsi rekursif dalam persoalan  faktorial  nih. Dalam fungsi faktorial kali ini, saya melakukan dua pengkondisian, pertama untuk penghentian fungsi dan yang kedua sebagai penjalannya dan proses fungsi tersebut. #include <iostream>   using namespace std;         long rekursiffaktorial( int f)   {        if (f == 0)            return 1;        else            return f * rekursiffaktorial(f - 1);   }         int main()   {        int x;        int n = 4...