编写用户自定义过程实现功能:用折半查找法查找数组中的某个元素,找到元素,过程返回该元素的下标,找不到

编写用户自定义过程实现功能:用折半查找法查找数组中的某个元素,找到元素,过程返回该元素的下标,找不到则返回-1。

第1个回答  推荐于2018-04-27
这是给你的查考程序,方法很多,需要自己琢磨,希望对你有帮助:
//折半查找法
#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); //输出值
}本回答被提问者和网友采纳
相似回答