1. 二分查找算法——循环
public static int search(int[] arr,int k){
int start=0;
int end=arr.length-1;
while(start<=end){
int mid=(start+end)/2;
if(arr[mid]==k)
return mid;
else if(arr[mid]>k)
end=mid-1;
else
start=mid+1;
}
return -1;
}
2. 二分查找算法——递归
public static int search2(int[] arr,int k,int start,int end){
if(start>end)
return -1;
int mid=(start+end)/2;
if(arr[mid]==k)
return mid;
else if(arr[mid]>k){
return search2 (arr,k,start,mid-1);
}else{
return search2(arr,k,mid+1,end);
}
}
测试:
public static void main(String[] args) {
int [] arr={2,4,5,9,10,24};
int k=9;
System.out.println(search(arr,k));
System.out.println(search(arr,2));
System.out.println(search(arr,24));
System.out.println(search(arr,0));
System.out.println(search2(arr,k,0,arr.length-1));
System.out.println(search2(arr,2,0,arr.length-1));
System.out.println(search2(arr,24,0,arr.length-1));
System.out.println(search2(arr,0,0,arr.length-1));
}