输入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.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[] = new int [n];
for(int i = 0;i < n;i++ )
a[i] = sc.nextInt();
int v = sc.nextInt();
Erfen(a , 0 , a.length-1 , v);
System.out.print(flag);
}
static int flag = 0;
public static void Erfen (int a[] , int m , int n , int v)
{
if(m>n)
{
System.out.println("-1");
return;
}
flag++;
int middle = (n-m)/2+m;
if(a[middle] < v)
{
Erfen(a, middle+1 , n , v);
}
else if(a[middle] > v)
{
Erfen(a, m , middle-1 , v );
}
else
System.out.println(middle);
}
}