【Java】 二分查找算法(递归+循环)
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)); }