java int类型数组的二分查找算法
这里我介绍两种实现方式:while循环实现和递归实现
1.while循环实现:
/*循环实现*/
private static void demo(int[] arr,int key){
int max=arr.length-1,min=0,mid;
//比较最大下标和最小下标范围是否正常
while (max>=min){
//区中间下标
mid=(min+max)/2;
if(arr[mid]<key){//判断查找的值和数组中间值大小
//查询的值大于中间值时 最小下标变为mid+1
min=mid+1;
}else if(arr[mid]>key){
//查询的值小于中间值时 最大下标变为mid-1
max=mid-1;
}else{
//数组中有值和key一样
System.out.println("下标为:"+mid);
break;
}
}
}
调用方法
int[] arr={1,3,5,7,9};
demo(arr,9);
运行结果:
2.递归方法实现:
/*递归实现*/
private static void demo1(int[] arr,int key,int min,int max) {
int mid=(max+min)/2;
if(key==arr[mid]){ //查询的值等于中间值得时候
System.out.println("找到了,下标为:"+mid);
return;
}else if(key>arr[mid]){ //查询的值大于中间值
min=mid+1;
}else{//查询的值小于中间值
max=mid-1;
}
if(max>=min){ //正常范围
demo1(arr,key,min,max);
}else{
System.out.println("没找到!");
}
}
调用方法:
int[] arr={1,3,5,7,9};
demo1(arr,7,0,arr.length-1);
运行结果: