首页 > 解决方案 > 线性搜索的意外输出

问题描述

请在下面找到我的代码进行线性搜索。二进制搜索功能给出正确的输出。但是在进行压力测试之后,我没有得到正确的线性搜索输出。当使用与压力测试产生的相同输入(测试用例)实现相同的线性搜索代码时,代码会给出正确的输出。

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。我找不到错误。

标签: c++linear-search

解决方案


您正在创建一个带有n元素的向量:

vector<int> a(n);

然后添加 push_back元素n

这会导致和中的n*2元素,您正在查看所有这些元素。我的猜测是第 5 个索引在这个特定的测试用例中具有价值。alinear_search4


推荐阅读