输入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
思路:
二分法就是把一个数组折半查找,再折半直到找到数据位置,或者无数据位置。比如说1-100,你选的值是23,那么范围写法就是(索引写法类似)
第一次折半是1-50,51-100,经过查找23<50,是在1-50里。
第二次是1-25,26-50,经过查找23<25,是在1-25里。
........以此类推下去
#include <stdio.h>
#include <stdlib.h>
#define N 100
int Binfind(int a[],int key,int n);
int main()
{
int n,i,a[N];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int x;
scanf("%d",&x);
Binfind(a,x,n);
return 0;
}
//分为左右两部分
int Binfind(int a[],int key,int n)
{
int left=0;
int right=n-1;
int cot=0;
while(left<=right)
{
int middle=(left+right)/2;//中间值
cot++;//计算查找的次数
if(key==a[middle])
{
printf("%d\n",middle);
printf("%d",cot);
return middle;
}
if(key>a[middle])
left=middle+1;
else
right=middle-1;
}
printf("-1\n");
printf("%d",cot);
return -1;
}