这将在未排序的数组中找到第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);
}
答案 0 :(得分:0)
问问自己n
与vec.size()
相比是什么。假设n
在0
和vec.size()-1
之间是随机的,则以下成立:
-最好是n = 0
。
-最坏的情况是n = vec.size()
。
-通常情况下,n ~ vec.size()
(~
表示成比例)。
因此,通常来说,时间复杂度确实是O(n^2) = O(vec.size()^2) = O(n*vec.size())
。