期末C语言特辑- 二分查找法
期末C语言特辑
二分查找法
【问题描述】编程函数实现在有序数据中进行折半查找,要求从键盘上输入10个升序整数存入一维数组a,再输入要查询的数据值,根据查询结果打印输出“Not found”或“Found”。
【输入形式】“%d”
【输出形式】“%s”
【样例输入】
12 33 45 66 76 89 90 102 202 333
89
【样例输出】
“Found”
【样例说明】样例输入的第一行代表用户从键盘输入10个升序整数,第二行输入要查找的数据值。样例输出根据查找结果显示提示信息。查找成功输出“Found”,查找失败输出果打印输出“Not found”。
【评分标准】输出结果完全正确的满分。
答案解析
#include <stdio.h>
void find(int a[],int num)
{
int tou=0;
int wei=10-1;
int flag=-2;//no find
while(tou<=wei)
{
int zhong=(tou+wei)/2;
if(num==a[zhong])
{
printf("Found");
flag=1;
break;
}
else if(num>a[zhong])//如果想查找的值大于中间值,中间值之前的数应当全部舍去
{
tou=zhong+1;
}
else //如果想查找的值小于中间值,中间值之后的数应当全部舍去
{
wei=zhong-1;
}
}
if(flag==-2)
printf("Not found");
}
int main(){
int a[10],n,i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&n);
find(a,n);//调用函数
return 0;
}
期末必过
XIUMIUS
图文编辑:张华瑾
图文审核:宋庆淼