代码小白,刚开始找工作面试碰到的,留作纪念,有不合适的地方请留言
public class demo {
public static void main(String[] args) {
//自定义一个数组
int []arr = new int[10];
for (int i = 0; i < 10; i++) {
arr[i]=i;
}
int index = test(arr, 1, 0, arr.length - 1);
if (index==-1){
System.out.println("no");
} else {
System.out.println("index:"+index);
}
}
/**
* 二分法递归查询有序的int数组中指定元素的位置
* @param arr:需要查询的数组
* @param result:需要查询位置的元素
* @param min:当前查询时最小索引数
* @param max:当前查询时最大索引数
* @return
*/
public static int test(int[] arr,int result,int min,int max){
int mid = (max+min)/2; // mid代表二分法中间位置的索引
//当最小索引数刚好比最大索引数小1的时候,会产生一个死循环,因为二分出来的中间索引mid永远是等于min
//所以需要进行一个mid+1的操作
if (min+1>=max){
mid=min+1;
}
//当前查询时最小索引数大于最大索引数的时候返回-1,代表数组中不存在需要查询的元素
if (max<mid){
return -1;
}
//中间索引位置所在的元素与需要查询位置的元素相同,返回当前中间索引位置
if (arr[mid]==result){
return mid;
}
//中间索引位置所在的元素大于需要查询位置的元素相同,表示元素在数组中的位置处于min与mid之间
//所以将最大索引数定义为mid,并递归
if (arr[mid]>result){
max=mid;
return test(arr,result,min,max);
}
//中间索引位置所在的元素小于需要查询位置的元素相同,表示元素在数组中的位置处于max与mid之间
//所以将最小索引数定义为mid,并递归
if (arr[mid]<result){
min=mid;
return test(arr,result,min,max);
}
//程序走不到这里,单纯不想用else if
return 0;
}
}