二分查找

来源:互联网 发布:建筑外观上色软件 编辑:程序博客网 时间:2024/06/04 00:23
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存在于数组中,它的索引就不会大于endif(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));}

迭代可以实现的尾递归都可以实现!

0 0