线性搜索未返回正确的索引

时间:2018-05-05 22:38:59

标签: c linear-search

我的线性搜索总是返回-1,我不知道为什么。我试着搞清楚但没有成功。搜索功能每次都进入“else”分支,“then”永远不会执行。

#include <stdio.h>
#include <stdlib.h>
#define size 50000

int search(int n,int s,int v[s])
{
    int i;
    for(i=0;i<s;++i)
    {
        if(v[i]==n)
            return i;
        else
            return -1;
    }
}

int main(void)
{
    int valores[size];
    //start the vector and put values in it.
    for(int i=0;i<size;++i)
        valores[i]=(i+1)*2;
    //search the 50000 values
    for(int i=1;i<=size +1;++i)
    {
        int p=search(2*i,size,valores);
        if(p==-1)
            printf("Not found %d\n",i);
        else if(valores[p]!=2*i)
            printf("Found %d in wrong index: %d\n",i,p);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:3)

您总是在第一个索引后离开搜索功能,0;
因为在0它将是相同的并且返回i,或者不返回-1 如果你将n作为v[0],我假设它确实返回0而不是-1 改变这种方式:

for(i=0;i<s;++i)
{
    if(v[i]==n)
        return i;
}
return -1;

你得到了你在评论中提到的警告(“控制到达非空函数的结尾”),因为函数的最后没有return。它当然是无法到达的,但警告可能是发现问题的暗示。