Линейный поиск не возвращает правильный индекс - PullRequest
0 голосов
/ 06 мая 2018

Мой линейный поиск всегда возвращает -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 голосов
/ 06 мая 2018

Вы всегда выходите из функции поиска после первого индекса, 0;
потому что при 0 он либо будет идентичен и вернет i, либо нет и вернет -1.
Я предполагаю, что он возвращает 0 вместо -1, если вы дадите n как v[0].
Измените это так:

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

Вы получаете предупреждение, которое вы упоминаете в комментарии («управление достигает конца недействительной функции»), потому что в самом конце вашей функции нет return. Это, конечно, было бы недоступно, но предупреждение могло быть подсказкой для поиска проблемы.

...