有15个数按大由小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该组中第几个元素的值.

帮帮我啊!谢谢了
有15个数按大由小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该组中第几个元素的值.如果该组中,输出"无此数"

题目不是太明白,楼主是想定义了15个数 ,然后输入一个任意数除2,找到任意数除2在定义的15个数中的位置是吗?》 那要是输入的任意数除2后的数不在定义的数中怎么办? 是显示输入错误还是其他的什么?
#include<iostream.h>
int main()
{
double a[15],n,k;
int m;
for(m=0;m<15;m++)
{cout<<"输入"<<15-m<<"个由大到小数"<<endl;
cin>>a[m];}
cout<<"输入要查找的数"<<endl;
cin>>n;
k=n/2;
bool falg=false;
for(m=0;m<15;m++)
{
if(k==a[m])
{cout<<"该数再数组中的位置是:"<<m+1<<endl;
falg=true;}

if(!falg)
cout<<"查无此数"<<endl;}
system("PAUSE");
return 0;
} 这次应该没错了
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-11-03
(数已经按从大到小排列)
1、若剩余数大于1,折半 找到中间值 与目标值比较
2、若中间值比目标值大,则取前半部分,转1;
3、若中间值比目标值大,则取前半部分,转一;,则取后半部分,转1;
4、若中间值等于目标值,输出;
5、剩余数不大于1,输出“无此数”;

不懂再回答你。本回答被网友采纳
第2个回答  2009-11-04
从小到大排列
int find(int soure[], int low, int high, int tar)
{
int mid = (low+high)/2;
if(soure[mid] == tar)
return mid;
else if(low>=high)
return -1 //not find tar
else if(soure[mid]>tar)
return find(soure,mid+1,high,tar);
else
return find(soure,low,mid-1,tar);

}

main()
{
int a={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int tar = 5,i;
i = find(a,0,14,tar);
if(i==-1)
printf("无此数");
else
printf("%d",find(a,0,14,tar));
}
相似回答