public class BinarySearch
{
public static int search(int findKey, int[] target)
{
int startPoint=0;
int endPoint=target.length-1;
while(startPoint<=endPoint)
{
int mid=startPoint+(endPoint-startPoint)/2;
if(findKey<target[mid])
{
endPoint=mid-1;
}
else if(findKey>target[mid])
{
startPoint=mid+1;
}
else
{
return mid;
}
}
return -1;
}
//递归实现
public static int rank(int findKey, int[] target)
{
return rank(findKey, target,0,target.length-1);
}
private static int rank(int findKey, int[] target, int start, int end)
{
//如果key存在于数组中,它的索引就不会大于end
if(start>end)
{
return -1;
}
int mid =start+(end-start)/2;
if(findKey<target[mid])
{
return rank(findKey, target,start,mid-1);
}
else if(findKey>target[mid])
{
return rank(findKey, target,mid+1,end);
}
else
{
return mid;
}
}
}
测试代码:
public void testBinarySearch()
{
int[] target=new int[]{1,3,5,7,10};
System.out.println(BinarySearch.rank(10, target));
System.out.println(BinarySearch.search(10, target));
}
迭代可以实现的尾递归都可以实现!