//递归法 查找数
public static int getNumberIndex1(int[] arr,int num,int L,int R){
// 前面两个条件 可以提高效率
// 如果不加, 一个不存在的数, 要等待满足 L>R 时候,才能满足, 还调用好多次
// 如果 加上,一个不存在的数,直接 就可以判断出
if(num<arr[L]||num>arr[R]||L>R){
return -1;
}
//求出中点位置
int mid=L+(R-L>>2); // + -符号优先级大于 >>
// 如果 中间这个数 比 num 大,就去 左边找
if(arr[mid]>num){
return getNumberIndex1(arr,num,L,mid);
}else if(arr[mid]<num){
return getNumberIndex1(arr,num,mid+1,R);
}else {
return mid;
}
}
// 迭代法 查找数
public static int getNumberIndex(int[] arr,int num){
if(arr==null){
return -1;
}
int L=0;
int R=arr.length-1;
while (L<=R) {
int mid=L+(R-L>>2);
// 如果 中间这个数 > num
// 去他的左边去找
if(arr[mid]>num){
// 那么它的左边界 就要变
R=mid-1;
}else if(arr[mid]<num){
// 如果 中间这个数<num
// 去右边去找
L=mid+1;
}else {
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] arr=new int[100];
for (int i = 0; i <100 ; i++) {
arr[i]=i+1;
}
int numberIndex1 = getNumberIndex1(arr, 100, 0, arr.length - 1);
System.out.println(numberIndex1);
System.out.println(getNumberIndex(arr,100));
}
}