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

有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值,如果该数不在数组中,则打印出“无此数”。要求用C++编程
#include <iostream>
using namespace std;
int main()
{
void Search(int x,int array[]);
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1},x;
cout<<"input a number:";
cin>>x;
Search(x,a);
return 0;
}

void Search(int x,int array[])
{
int mid,low=1,high=15,target=0;
while(low<=high && target==0)
{
mid=(low+high)/2;
if(x==array[mid])
{
cout<<"该数是数组中的第"<<mid<<"数"<<endl;
target=1;
}
else if(x<array[mid]) high=mid-1;
else low=mid+1;
}
if(target==0) cout<<"数组中找不到该数"<<endl;
}
以上是我编的一段代码,输入12运行结果却是“数组中找不到该数”,求各位指定迷津,我这段程序哪出错了,望指点。。。感激不尽。。。

#include<stdio.h>
#define N 15
int main()
{
int a[N],i,key,mid,star=0,end=N-1;
printf("enter N numbers:\n");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
printf("enter a lookfor number:\n");
scanf ("%d",&key);
if(key>a[end]||key<a[0])
{ printf("the number is not lookfor it\n");}
while(star<=end)
{
mid = (star+end)/2;
if(key==a[mid]) { printf("这个数在第%d\n",mid);}
if(key>a[mid]) {star=mid+1;}
else {end=mid-1;}
}
return 0;
}
不好意思看错题了,我这个是从小到大排列的。

求用递归应该怎么个写法。追问

兄台 你的和我的运行结果一样啊。。。。

温馨提示:内容为网友见解,仅供参考
无其他回答

C语言程序设计实现任一字符和字符串长度的输出,其中字符和字符串内容由...
回车确认,返回输入的字符串int getLen(char *str);\/\/通过指针获取字符串长度void meError(void *p);\/\/内存申请失败int main(){ char *str=NULL; str=input(); printf("\\n输入的字符串为:%s\\n",str)

...输入一个数,要求用拆半查找法找出该数是数组中的第几个元素_百度知...
\/ z有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用拆半查找法找出该数是数组中的第几个元素.\/ include"math.h"main(){ static int i,j,m,a[15]={1,4,9,13,21,34,55,89,144,233,377,570,671,703,812};scanf("%d",&m);for(j=14;j>=0;j--)printf("%4d",...

有15个数按大由小顺序存放在一个数组中,输入一个数,要求用折半查找法...
{ int a[15]={x.x.x.x.x.x.x.x.x.x.x.x.x.x.x};\/\/x为输入的十五个数\/\/ int b;printf("enter the number:");scanf("d%,&b");---我下线了

有15个数按大由小顺序存放在一个数组中,输入一个数,要求用折半查找法...
{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;} syste...

有15个数按小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法...
比如给一个4的数,程序第一步从数组中取出排在中间数的数(i=7),即第8个数89.用89和4比较。如果大于89就往后循环查找,即查找89后的{144,233,377,570,671,703,812},如果小于89就往前查找,即查找89前的]{1,4,9,13,21,34,55},不管往前还是往后最大循环次数都是7,所以while循环结束条件是(fabs(i-7)...

有15个数按由大到小排列,输入一个数,运用折半查找法找出该数是第几个...
void main(){ int i,number,top,bott,mid,loca,a[N],flag=1,sign;char c;printf("由大到小输入15个数 :\\n");for(i=0;i<N;i++){ scanf("%d",&a[0]);i++;while(i!=-1&&i<N){ scanf("%d",&a[i]);if(a[i]<a[i-1])i++;else {printf("输入有误,请重新输入:\\...

c语言:编写程序,在有序的数列中查找某数,若该数在此数列中则输出它的...
题目:试编写一个程序完成:有15个数按从下到大的顺序存放在一个数组中.输入一个数,要求折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,输出“不在表。===下面是C代码,其中数组没有设计为录入,而是固定数组=== \/\/输出的序列是从0开始算的,也就是输出的是所在数组的索引...

c语言编程实现“折半查找”的过程。
折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。参考程序,希望对你有所帮助!include<stdio.h> void main(){ int a[20],x,i,start,end;printf("input 20 numbers:\\n");for(i=0;i<20;i++) scanf("%d",&...

c语言怎么使用折半法
int a[]={89,99,122,220,250,260,400};\/\/如果返回right的值,说明没找到int half_find(int a[], \/\/查找数组 int left, int right, \/\/起始位置 int target) \/\/查找目标{ int pos = right; while (left < right) { int mid = left + (right-left)\/2; if (a[mid] > target...

c语言的折半查找法
你的数组的索引为0-14 所以你可以设两个变量 这两个变量a,b是用来限制你要的数的范围的 一开始a=0 b=14 接着取索引为int((a+b)\/2 )的元素与你输入的比较 如果比输入的小的话那么设a=int(a+b)\/2 )接着继续取索引为int((a+b)\/2 )的元素与你输入的比较 如果比输入的大的...

相似回答