采用二分查找法从一个已经升序排序的数组a[n]中,查找某个数k。如果找到k, 输出k所在的数组下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。 如: 数组a[n]:3 5 6 7 9 采用二分查找法查找5,则: 第一次比较:6 第二次比较:3 第三次比较:5 则经过3次比较,查找到5,输出数组下标:1 查找4时,则 第一次比较:6 第二次比较:3 第三次比较:5 则经过3次比较后,未找到4,输出-1。 函数接口定义: 参数说明:a为数组首址,n为数组长度,k为待查找的数, *p为比较次数。 函数返回值:找到k的数组下标值或-1(未找到)。 |
裁判测试程序样例:
#include<stdio.h>
int Bsearch(int *a, int n, int k,int *p);
int main(){
int n,cmp,*p=&cmp;
int pos,num=0;
int low=0,high,mid,k;
while(~scanf("%d",&n))
{
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&k);
int pos=Bsearch(a,n,k,p);
printf("%d\n%d