线性搜索代码显示我的项目不是 present.Please 帮我更正

Linear Search Code Shows that my item is not present.Please help me make corrections

This is the function for linear search where i am only taking one variable x that is the to search for item variable

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 is present so it should show its index location but it shows -1 for both meaning both are not present true for 2nd test case

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

您的代码中存在逻辑错误 - 您的代码的以下部分不正确 -

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

如果条件评估为 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;
  }

问题是你太早跳出了循环。

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 不匹配的数字,它就会 return -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 在循环结束的情况下执行任何操作 - 导致未定义的行为。


解决方案是将 return -1 推迟到 之后 循环耗尽了 arr.

中的所有值

此外,您的循环在 i == 5 时终止,但您还没有检查 arr 中的最后一个数字。让我们使用一个宏来避免 hard-code 这个值。

#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
}
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;
}

用这个就行了