我不完全确定这个大O的复杂性

I'm not entirely sure the Big O complexity of this

本文关键字:复杂性 不完全      更新时间:2023-10-16

这将在未排序的数组中找到第 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);
}

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

所以一般来说,时间复杂度确实是O(n^2) = O(vec.size()^2) = O(n*vec.size()).