Неожиданный вывод линейного поиска - PullRequest
3 голосов
/ 21 апреля 2020

Пожалуйста, найдите мой код ниже для линейного поиска. Функция двоичного поиска дает правильный вывод. Но после проведения стресс-тестирования я не получаю правильные результаты линейного поиска. При реализации того же кода для линейного поиска с тем же входным сигналом (тестовый пример), что и при стресс-тестировании, код выдает правильный вывод.

int linear_search(const vector<int> &a, int x) 
{
  for (int i = 0; i < a.size(); ++i) 
  {
    if (a[i] == x)
    {
      return i;
    }
  }
  return -1;
}

основная функция

int main() {
   while(true)
   {
     int n=5;
   vector<int> a(n);
   for (size_t i = 0; i < n; i++) {
     int b = rand() % 5 + 1;
     a.push_back(b);
   }
   for (size_t i = 0; i < n; i++) {
     std::cout<<a[i]<<" ";
   }
   std::cout<<"\n";
   int x = rand() % 10 + 1;
   std::cout<<x<<"\n";
   int l = linear_search(a,x);
   int b = binary_search(a,x);
   if(l != b)
   {

     std::cout<<l<<"\n";
     std::cout<<b<<"\n";
     break;
   }
   else
   {
     std::cout<<"Ok\n";
   }
   }
}

После запуска Приведенный выше код, я получаю неправильный (неожиданный) вывод, когда случайный ввод (произведенный стресс-тестированием):

0 0 0 0 0

4

Результат линейного поиска равен 5 вместо -1. Я не могу найти ошибку.

1 Ответ

7 голосов
/ 21 апреля 2020

Здесь вы создаете вектор с n элементами:

vector<int> a(n);

, а затем дополнительно push_back ing n элементов.

Это приводит к в n*2 элементах в a и в linear_search вы смотрите на все из них. Я предполагаю, что 5-й индекс имеет значение 4 в этом конкретном тестовом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...