题目描述
编写程序实现折半查找算法。
输入
第一行是查找表的长度n
第二行是查找表中的数据元素 ;
第三行是要查找的数据元素的关键字.
输出
查找成功返回位序,不成功返回-1 ,第二行为比较的次数。
样例输入
11
5 13 19 21 37 56 64 75 80 88 92
100
样例输出
-1
4
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define MaxSize 1000
int num[MaxSize];
int ans=0;//比较次数
int Binserch(int num[],int n,int k)
{
int mid,low=0,high=n-1;
while(low<=high)
{
ans++;//比较次数加一
mid=(low+high)/2;
if(num[mid]==k)//找到,返回下标
{
return mid;
}else
if(k<num[mid])//k是小于中间数,则k是在中间数以左
{
high=mid-1;
}else
if(k>num[mid])//k是大于中间数,则k是在中间数以右
{
low=mid+1;
}
}
return -1;//未找到返回-1
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
int k;
scanf("%d",&k);
printf("%d",Binserch(num,n,k));
//查找算法参考教材318页
printf("\n");
printf("%d",ans);
}