【发布时间】:2019-05-31 15:54:57
【问题描述】:
这将在未排序的数组中找到第 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);
}
【问题讨论】:
-
你为什么不想使用
std::nth_element? -
我只是想为自学类型的事情做这个。
-
是的,O(n^2)。一个 n 用于 for 循环,一个 n 用于尾递归。
-
这个复杂度是
O(n x size) -
@Damien
O(n x size),大小是一个常数,将简化为O(n)
标签: c++