我不确定这件事的大复杂性

时间:2019-01-05 06:58:53

标签: c++

这将在未排序的数组中找到第n个元素,就好像它已被排序一样,我希望它在n log n次以下运行,但是我不确定这的运行时间,是否为O(n ^ 2)?

int nthElement(std::vector<int> vec, int n)
{
  n--;
  int smallest = vec[0];
  int index = 0;
  for(int i = 0; i < vec.size(); i++)
  {
    if (vec[i] < smallest)
    {
      smallest = vec[i];
      index = i;
    }
  }
  vec.erase(vec.begin() + index);
  if( n == 0)
  {
    std::cout << "Do I get here?" << std::endl;
    return smallest;
  } 
  return nthElement(vec, n);
}

1 个答案:

答案 0 :(得分:0)

问问自己nvec.size()相比是什么。假设n0vec.size()-1之间是随机的,则以下成立:
-最好是n = 0
-最坏的情况是n = vec.size()
-通常情况下,n ~ vec.size()~表示成比例)。

因此,通常来说,时间复杂度确实是O(n^2) = O(vec.size()^2) = O(n*vec.size())