描述:
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入格式:
输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。
输出格式:
输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入样例:
4
1 2 3 4
1
输出样例:
0
2
import java.util.Scanner;
@SuppressWarnings("all")
public class Binary_search_algorithm {//二分查找
static int times = 0;//查找的次数
public static void main(String args[]){
int number=0,find=0;//n个整数 查找的数x
int [] arrays;
Scanner scanner = new Scanner(System.in);
number = scanner.nextInt();
arrays = new int[number];
for(int i = 0;i < arrays.length; i++){//n个非降序排列的整数
arrays[i] = scanner.nextInt();
}
find = scanner.nextInt();
Arrays.sort(arrays);
System.out.printf("%d\n%d",finds(arrays,find),times);
}
static int finds (int a[],int finds) {//二分递归查找该数的下标 找不到返回-1
int left = 0, right = a.length-1;
while (left <= right) {
times++;
int mid = (left + right) / 2;
if (a[mid] == finds) {
return mid;
}
else if (a[mid] < finds){
left = mid + 1;
}
else if (a[mid] > finds) {
right = mid - 1;
}
}
return -1;
}
}