您的位置:首页 > 其它

分治法——二分查找

2016-05-27 11:16 197 查看
基于循环和递归

递归法: 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: