public class Serach5 {
public static void main(String args[]) {
int [] a={1,2,3,4,5,7,8,9,10};
Serach5 s=new Serach5();
System.out.println(s.contains(a, 0, a.length-1, 3));
System.out.println(s.binarySerach2(a, 0, a.length-1, 6));
}
public boolean contains(int[] a,int start,int end,int item) {
return binarySerach(a, start, end, item);
}
/**
* 递归实现二分查找
* @param a 数组为有序数组
* @param start
* @param end
* @param item 需要查找的元素
* @return 找到返回true,否则返回false
*/
public boolean binarySerach(int[] a,int start,int end,int item) {
boolean found=false;
int mid=(start+end)/2;
if(start>end) found=false;
else if(a[mid]==item) found=true;
else if(a[mid]<item) found=binarySerach(a,mid+1,end,item);
else if(a[mid]>item) found=binarySerach(a,start,mid-1,item);
return found;
}
/**
* 迭代实现二分查找
* @param a 数组为有序数组
* @param start
* @param end
* @param item 需要查找的元素
* @return 找到返回索引,否则返回应该插入的位置
*/
public int binarySerach2(int[] a,int start,int end,int item) {
int mid=-1;
while(start<=end) {
mid=(start+end)/2;
if(a[mid]<item) start=mid+1;
else if(a[mid]>item) end=mid-1;
else return mid;
}
return -(mid+1);
}
}
转载于:https://my.oschina.net/willyliu/blog/133389