编写用户自定义过程实现功能:用折半查找法查找数组中的某个元素,找到元素,过程返回该元素的下标,找不到
编写用户自定义过程实现功能:用折半查找法查找数组中的某个元素,找到元素,过程返回该元素的下标,找不到则返回-1。...
编写用户自定义过程实现功能:用折半查找法查找数组中的某个元素,找到元素,过程返回该元素的下标,找不到则返回-1。
展开
1个回答
展开全部
这是给你的查考程序,方法很多,需要自己琢磨,希望对你有帮助:
//折半查找法
#include <stdio.h>
void main()
{
int a[100],i,num,m,n,c=0; //定义a数组为100个元素,令c的初始值为0.
m=0; //m为最小下标
n=99; //n为最大下标
for (i=0;i<100;i++)
{
a[i]=3*i;
printf("%d\t",a[i]); //给数组赋值并输出
}
printf("Input the number which you want to find:");
scanf("%d",&num); //输入要查找的数
for(i=0;;i++)
{
if(num==a[99])
{
c=99;break; //如果num是最后一个这输出为第99个
}
if((n==m+1||m==n)&&num!=a[(n-m)/2+m]) //num不是数组a的数,则跳出循环
{
break;
}
if(num>a[(n-m)/2+m])
{
m=(n-m)/2+m;continue; //如果num大于中间的数,则然数组下标m=中间数的下标
}
if(num<a[(n-m)/2+m])
{
n=(n-m)/2+m;continue; //如果num小于中间的数,则然数组下标n=中间数的下标
}
if(num==a[(n-m)/2+m])
{
c=(n-m)/2+m;break; //如果num等于中间的数,则跳出循环
}
}
if(c==0)
printf("-1\n");
else printf("%d is a[%d] numble!\n",num,c); //输出值
}
//折半查找法
#include <stdio.h>
void main()
{
int a[100],i,num,m,n,c=0; //定义a数组为100个元素,令c的初始值为0.
m=0; //m为最小下标
n=99; //n为最大下标
for (i=0;i<100;i++)
{
a[i]=3*i;
printf("%d\t",a[i]); //给数组赋值并输出
}
printf("Input the number which you want to find:");
scanf("%d",&num); //输入要查找的数
for(i=0;;i++)
{
if(num==a[99])
{
c=99;break; //如果num是最后一个这输出为第99个
}
if((n==m+1||m==n)&&num!=a[(n-m)/2+m]) //num不是数组a的数,则跳出循环
{
break;
}
if(num>a[(n-m)/2+m])
{
m=(n-m)/2+m;continue; //如果num大于中间的数,则然数组下标m=中间数的下标
}
if(num<a[(n-m)/2+m])
{
n=(n-m)/2+m;continue; //如果num小于中间的数,则然数组下标n=中间数的下标
}
if(num==a[(n-m)/2+m])
{
c=(n-m)/2+m;break; //如果num等于中间的数,则跳出循环
}
}
if(c==0)
printf("-1\n");
else printf("%d is a[%d] numble!\n",num,c); //输出值
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询