基于循环和递归
递归法:
public int binary(int []data,int k)
{
if(data==null||data.length==0)
return -1;
else
return binarySearch(data,0,data.length-1,k);
}
public int binarySearch(int []data,int low,int high,int k)
{
if(low>high)
return -1;
int mid=low+(high-low)/2;//防止溢出;
if(data[mid]<k)
return binarySearch(data,mid+1,high,k);
else if(data[mid]>k)
return binarySearch(data,low,mid-1,k);
else
return mid;
}
循环法:
//循环形式
public int binaryC(int data[],int k)
{
if(data==null||data.length==0)
return -1;
int low=0;
int high=data.length-1;
while(low<high-1)//防止low和high相邻可能出现死循环的情况;
{
int mid=low+(high-low)/2;
if(data[mid]==k)
return mid;
else if(data[mid]<k)
low=mid;
else
high=mid;
}
if(data[high]==k)
return high;
else if(data[low]==k)
return low;
return -1;
}