C语言问题!急需!请各位高手帮忙!

有15个数按由大到小顺序存放一个数组,输一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。请各位C语言高手多多指教!小弟不胜... 有15个数按由大到小顺序存放一个数组,输一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。
请各位C语言高手多多指教!小弟不胜感激!~~~~~~~
展开
 我来答
斌馥6829
2006-11-24 · TA获得超过568个赞
知道小有建树答主
回答量:545
采纳率:0%
帮助的人:631万
展开全部
#include <stdio.h>
void search(int a[],int k);
void main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
search(a,8);
}

void search(int a[],int k)
{
int low,hig,mid;
low=0;hig=14;
mid=(low+hig)/2;
while ((a[mid]!=k)&&low<=hig)
{
if(a[mid]<k)
hig=mid-1;
else
low=mid+1;
mid=(low+hig)/2;
}
if(low>hig)
printf("Not found!\n");
else
printf("the number is the %d\n",mid);
}
viral
2006-11-24 · TA获得超过1924个赞
知道小有建树答主
回答量:602
采纳率:0%
帮助的人:841万
展开全部
#include <stdio.h>

void main()
{
int data[15];
int i, j, k;
int n;
for (i = 0; i < 15; i++)
{
scanf("%d", &n);
for (j = 0; j < i; j++)
{
if (n > data[j])
{
for (k = i; k > j; k--)
{
data[k] = data[k - 1];
}
break;
}
}
data[j] = n;
}

scanf ("%d", &n);
int b, e, m;
int index = -1;
for (b = 0, e = 14; e - b > 1; )
{
m = (b + e) / 2;
if (n == data[m])
{
index = m;
break;
} else if (n > data[m])
{
e = m;
} else
{
b = m;
}
}
if (n == data[b])
{
index = b;
} else if (n == data[e])
{
index = e;
}

if (index == -1)
{
printf("无此数");
} else
{
printf("%d", index);
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lenovotianyi
2006-11-24 · 超过54用户采纳过TA的回答
知道答主
回答量:272
采纳率:0%
帮助的人:0
展开全部
应该将2楼的输入排序部分和1楼的折半查找部分组合起来,这个程序我认为是最佳的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式