Veja nesta dica como implementar busca binária em Java.

Busca binária

publicclassBinarySearch
{
publicstaticfinalintNOT_FOUND=-1;

/**
*@returnposiçãoonde o item foi encontrado, ou não.
*/
publicstaticintbinarySearch(Comparable[]a,Comparablex)
{
intlow=0;
inthigh=a.length-1;
intmid;

while(low<=high)
{
mid=(low+high)/2;

if(a[mid].compareTo(x)<0)
low=mid+1;
elseif(a[mid].compareTo(x)>0)
high=mid-1;
else
returnmid;
}

returnNOT_FOUND;//NOT_FOUND=-1
}

//Testando o programa
publicstaticvoidmain(String[]args)
{
intSIZE=8;
Comparable[]a=newInteger[SIZE];
for(inti=0;ia[i]=newInteger(i*2);

for(inti=0;iSystem.out.println("Encontrado"+i+"em"+
binarySearch(a,newInteger(i)));

}
}

Busca binária recursiva

publicclassBinarySearchRecursive
{
publicstaticfinalintNOT_FOUND=-1;

/**
*@returnposição onde o item foi encontrado ou não encontrado.
*/
publicstaticintbinarySearch(Comparable[]a,Comparablex)
{
returnbinarySearch(a,x,0,a.length-1);
}

/**
*recursão
*/
privatestaticintbinarySearch(Comparable[]a,Comparablex,
intlow,inthigh)
{
if(low>high)
returnNOT_FOUND;

intmid=(low+high)/2;

if(a[mid].compareTo(x)<0)
returnbinarySearch(a,x,mid+1,high);
elseif(a[mid].compareTo(x)>0)
returnbinarySearch(a,x,low,mid-1);
else
returnmid;
}

//Programa teste
publicstaticvoidmain(String[]args)
{
intSIZE=8;
Comparable[]a=newInteger[SIZE];
for(inti=0;ia[i]=newInteger(i*2);

for(inti=0;iSystem.out.println("Encontrado"+i+"em"+
binarySearch(a,newInteger(i)));
}
}