用C语言 判断一个数是否是数组中的成员(用二分法查找)
已知数据a中一共有10个已排序的整数(由小到大排列)。现在从键盘上输入一个数,判断这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置来,否则打印“找不到“。...
已知数据a中一共有10个已排序的整数(由小到大排列)。现在从键盘上输入一个数,判断这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置来,否则打印“找不到“。
(提示:①设待查找的数为x,设三个位置变量l、m、h分别代表查找范围的顶部、中间位置和底部,m=(l+h)/2,把数分成以a[m]为中点的两段范围。②判断x 是否等于a[m],若是,则找到。③若大于a[m],则x必在后半段范围,即在a[m+1]至a[h]。则舍弃前半段,再在后半段重新划分两段范围,定出l、m和h,重复以上步骤,逐步缩小查找范围。) 展开
(提示:①设待查找的数为x,设三个位置变量l、m、h分别代表查找范围的顶部、中间位置和底部,m=(l+h)/2,把数分成以a[m]为中点的两段范围。②判断x 是否等于a[m],若是,则找到。③若大于a[m],则x必在后半段范围,即在a[m+1]至a[h]。则舍弃前半段,再在后半段重新划分两段范围,定出l、m和h,重复以上步骤,逐步缩小查找范围。) 展开
1个回答
2013-07-31
展开全部
#include<stdio.h>
void main()
{
int x,l=0,m,h=9,a[10]={1,2,3,4,5,6,7,8,9,10};
scanf("%d",&x);
m=(l+h)/2;
while(a[m]!=x && l<=h)
{
if(a[m]>x)
h=m-1;
else
l=m+1;
m=(l+h)/2;
}
if(a[m]==x)
printf("位置:%d",m+1);
else
printf("找不到");
}
void main()
{
int x,l=0,m,h=9,a[10]={1,2,3,4,5,6,7,8,9,10};
scanf("%d",&x);
m=(l+h)/2;
while(a[m]!=x && l<=h)
{
if(a[m]>x)
h=m-1;
else
l=m+1;
m=(l+h)/2;
}
if(a[m]==x)
printf("位置:%d",m+1);
else
printf("找不到");
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询