十六是只仙 发表于 2017-1-26 02:09:13

那个......请问我的折半算法错在哪里

#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 08:01:17

边界(最大、最小值),程序的行为,是>还是>=?,<还是<=?前面比较后的行为为何?
折半后的值?这些都查一下,相信有所获。

超凡天赐 发表于 2017-1-26 10:29:41

折半算法成立的条件是首先要是具有一定规律的数字,比如从大到小,从小到大。你的题目根本就没有说清楚,上来就是一串代码。等你题目说清楚了,我再来看看

十六是只仙 发表于 2017-1-26 13:32:36

超凡天赐 发表于 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 14:09:01

超凡天赐 发表于 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 17:54:54

十六是只仙 发表于 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 19:28:15

超凡天赐 发表于 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 20:03:25

十六是只仙 发表于 2017-1-26 19:28
int main()
{
        int a,b,c,d,m;


我用的是Mac os,所以我没试过在windows下怎么输入EOF
页: [1]
查看完整版本: 那个......请问我的折半算法错在哪里