Data diambil dari posisi 1 sampai posisi akhir N Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2. Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar? Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1 Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1 Jika data sama, berarti ketemu

//binary searching,
//program bisa jalan jika data sudah terurut
#include <iostream.h>
#include <conio.h>
int data[10]={1,3,4,7,12,25,40,65,78,90};
int binary_search(int cari)
{
int l,r,m;
int n=10;
l=0;
r=n-1;
int ketemu=0;
while (l<=r && ketemu==0)
{
m=(l+r)/2;
if (data[m]==cari)
ketemu=1;
else
if(cari<data[m])
r=m-1;
else l=m+1;
}
if(ketemu==1) return 1; else return 0;
}
void main()
{
clrscr();
int cari, hasil;
cout<<"masukan data yang ingin di cari= ";
cin>>cari;
hasil = binary_search(cari);
if(hasil==1)
{
cout<<"data ada!"<<endl;
}
else
if(hasil==0)
cout<<"data tidak ada!"<<endl;
getch();
}
contoh ke dua
#include <iostream.h>
#include <conio.h>
int cari_biner(int array[],int ukuran, int elemen);
void main()
{
const int ukuran=10;
int array[ukuran]={0,6,9,12,20,23,29,32,47,79};
cout<<"isi dari array : "<<endl;
for(int i=0;i<ukuran;i++)
cout<<" "<<array[i];
int elemen;
int tanda;
cout<<"\n masukkan data yang dicari : ";
cin>>elemen;
tanda= cari_biner(array,ukuran,elemen);
if (tanda!=-1)
cout<<"\n data tersebut ditemukan pada posisi : array["<<
tanda<<"],"<<" atau deret ke-"<<(tanda+1);
else
cout<<"\n data tersebut tidak ditemukan ";
getch();
}
int cari_biner(int array[],int ukuran,int elemen)
{
int start=0;
int end=ukuran - 1;
int middle;
int posisi=-1;
middle=(start + end ) / 2;
do
{
if(elemen<array[middle])
end=middle-1;
else if (elemen>array[middle])
start=middle+1;
middle=(start+end)/2;
}
while(start<=end && array[middle]!=elemen);
if(array[middle]==elemen)
posisi=middle;
return posisi;
}
INTERPOLATION SEARCH
Interpolation Search
Teknik searching ini dilakukan dengan perkiraan letak data.
Contoh ilustrasi: jika kita hendak mencari suatu nama di dalam buku telepon, misal yang berawalan dengan huruf T, maka kita tidak akan mencarinya dari awal buku, tapi kita langsung membukanya pada 2/3 atau ¾ dari tebal buku. Jadi kita mencari data secara relatif terhadap jumlah data. Rumus posisi relatif kunci pencarian dihitung dengan rumus:
Kode
|
Judul Buku
|
Pengarang
|
025
|
The C++ Programming
|
James Wood
|
034
|
Mastering Delphi 6
|
Marcopolo
|
041
|
Professional C#
|
Simon Webe
|
056
|
Pure JavaScript v2
|
Michael Bolton
|
063
|
Advanced JSP & Servlet
|
David Dunn
|
072
|
Calculus Make it Easy
|
Gunner Christian
|
088
|
Visual Basic 2005 Express
|
Antonie
|
096
|
Artificial Life : Volume 1 Gloria
|
Virginia
|
import java.util.Scanner;
public static int interpolationSearch(int[] sortedArray, int toFind)
{
int low = 0;
int high = sortedArray.length - 1;
int mid;
while (sortedArray[low] <= toFind && sortedArray[high] >= toFind)
{
if (sortedArray[high] - sortedArray[low] == 0)
return (low + high)/2;
mid = low + ((toFind - sortedArray[low]) * (high - low)) / (sortedArray[high] - sortedArray[low]);
if (sortedArray[mid] < toFind)
low = mid + 1;
else if (sortedArray[mid] > toFind)
high = mid - 1;
else
return mid;
}
if (sortedArray[low] == toFind)
return low;
else
return -1;
}
public static void main(String[] args)
{
Scanner scan = new Scanner( System.in );
int n, i;
System.out.println("masukkan jumlah elemnt bilangan bulat");
n = scan.nextInt();
int arr[] = new int[ n ];
System.out.println("\nEnter "+ n +" masukkan data bilangan bulat");
for (i = 0; i < n; i++)
arr[i] = scan.nextInt();
System.out.println("\nEnter element untuk mencari : ");
int key = scan.nextInt();
int result = interpolationSearch(arr, key);
if (result == -1)
System.out.println("\n"+ key +" data tidak ditemukan");
else
System.out.println("\n"+ key +" data berada pada posisi "+ result);
}
}