线性搜索代码显示我的项目不存在。请帮我纠正

时间:2017-01-30 13:43:18

标签: c algorithm linear-search

  

这是线性搜索的功能,我只使用一个变量x来搜索项目变量

int lsrch(int x)
    {int i;
    int arr[6] = {2,4,5,76,2,1};
    for(i=0;i<5;i++)
    {
        if(x==arr[i])
        {
            return i;
        }
        else
            return -1;
    }
    }

    int main()
    {
        int a,b;
        a=lsrch(76);
  

76存在所以它应该显示它的索引位置,但它显示-1表示两个意思都不适用于第二个测试用例

        b=lsrch(99);
        printf("%d",a);
        printf("%d",b);
    }

3 个答案:

答案 0 :(得分:2)

代码中的逻辑错误 - 你的代码的相应部分是不正确的 -

  if(x==arr[i])
   {
       return i
    }
    else 
         return -1

在第一次传递时,如果condition的计算结果为false,则返回-1。

正确代码 -

int lsrch(int x)
   {
    int i;
    int arr[6] = {2,4,5,76,2,1};
    for(i=0;i<=5;i++)
   {
      if(x==arr[i])
      {
        return i;
      }

   }
       return -1;
   }

  int main()
  {
      int a,b;
      a=lsrch(76);
  return 0;
  }

答案 1 :(得分:2)

问题是你过早地摆脱了循环。

int lsrch(int x)
{   
    int i;
    int arr[6] = {2,4,5,76,2,1};
    for(i=0;i<5;i++)
    {
        if(x==arr[i])
        {
            return i;
        }
        else
            return -1;      // Incorrect
    }
}

如上所述,只要您的代码找到一个与x不匹配的数字,它就会返回-1。它永远不会继续检查arr中的其余数字。

如果使用gcc -Wall -Werror进行编译,编译器会指出您犯了错误:

linsearch.c: In function ‘lsrch’:
linsearch.c:17:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^

这意味着在循环结束的情况下你不会返回任何内容 - 导致未定义的行为。

解决方案是推迟return -1直到 之后循环耗尽了arr中的所有值。

此外,您的循环会在i == 5时终止,但您未检查arr中的最后一个号码。让我们使用宏来避免必须对此值进行硬编码。

#define ARRAY_LEN(x)    (sizeof(x) / sizeof(x[0]))

int lsrch(int x)
{   
    int i;
    int arr[] = {2,4,5,76,2,1};
    for(i=0; i<ARRAY_LEN(arr); i++)
    {
        if(x==arr[i])
        {
            return i;
        }
    }

    return -1;    // Nothing left to check
}

答案 2 :(得分:0)

int lsrh(int x){
    int i,a[6]={2,4,5,76,2,1};
    for(i=0;i<6;i++){
        if(a[i]==x)
             return i;
        }
    return -1;
}

使用它会起作用