那个......请问我的折半算法错在哪里
#include<stdio.h>int SearchElement(int *array,int n,int element)
{int first=0;
int last=n;
while(first<=last)
{
int mid=(first+last)/2;
if(array>array)
{
first=mid+1;
}
else if(array<array)
{
last=mid-1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int m;
int a={3,2,46,4,7};
m=SearchElement(a,4,4);
printf("%d",m);
}
讲道理....我仔细检查了很多遍,觉得我的算法没写错啊,可是运行结果就是不对!!!还请大佬们帮忙看看{:10_277:} 边界(最大、最小值),程序的行为,是>还是>=?,<还是<=?前面比较后的行为为何?
折半后的值?这些都查一下,相信有所获。 折半算法成立的条件是首先要是具有一定规律的数字,比如从大到小,从小到大。你的题目根本就没有说清楚,上来就是一串代码。等你题目说清楚了,我再来看看 超凡天赐 发表于 2017-1-26 10:29
折半算法成立的条件是首先要是具有一定规律的数字,比如从大到小,从小到大。你的题目根本就没有说清楚,上 ...
int main()
{
int m;
int a={3,4,6,7,8};
m=SearchElement(a,4,8);
printf("%d",m);
},主函数应该是这个.....是想找到数组中一个元素,返回值是其在数组中位置 超凡天赐 发表于 2017-1-26 10:29
折半算法成立的条件是首先要是具有一定规律的数字,比如从大到小,从小到大。你的题目根本就没有说清楚,上 ...
#include<stdio.h>
int SearchElement(int *array,int n,int element)
{
int first=0;
int last=n;
while(first<=last)
{
int mid=(first+last)/2;
if(element>array)
{
first=mid+1;
}
else if(element<array)
{
last=mid-1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int a,b,c,d,m;
scanf("%d",&b);
for(c=0;c<b;c++)
{
scanf("%d",&a);
}
scanf("%d",&d);
m=SearchElement(a,b,d);
printf("%d",m);
}
我已经知道问题在哪了....但是还是想请问下,如果我希望输入待查找的整数,可以多次查找,输入EOF查找结束。该怎么该程序才能实现输出EOF结束{:10_277:} 十六是只仙 发表于 2017-1-26 14:09
#include
int SearchElement(int *array,int n,int element)
linux系统下,在输入回车换行后的空行位置,按 ctrl+d (先按ctrl键,不放,再按d键),windows系统下,在输入回车换行后的空行位置,按 ctrl+z,再回车确认。 超凡天赐 发表于 2017-1-26 17:54
linux系统下,在输入回车换行后的空行位置,按 ctrl+d (先按ctrl键,不放,再按d键),windows系统下,在 ...
int main()
{
int a,b,c,d,m;
scanf("%d",&b);
for(c=0;c<b;c++)
{
scanf("%d",&a);
}
do
{
scanf("%d",&d);
m=SearchElement(a,b,d);
printf("%d",m);
}while(d!=EOF);
}
为什么这样最后输出EOF时也不能退出循环?? 十六是只仙 发表于 2017-1-26 19:28
int main()
{
int a,b,c,d,m;
我用的是Mac os,所以我没试过在windows下怎么输入EOF
页:
[1]