繁体   English   中英

C++中的最大值和最小值时间复杂度O

[英]max value and min value time complexity O in c++

有谁知道以下两种方法可以找到相同长度向量的最大值和最小值,哪种方法在 C++ 中更快:

1.

std::sort(vector.begin(),vector.end());
vector.erase(std::unique(vector.begin(),vector.end()),vector.end());
min=vector.front();
max=vector.back();

2.

max=*max_element(vector.begin(),vector.end());
min=*min_element(vector.begin(),vector.end());

这个sort()函数基本上是快速排序、堆排序和插入排序的混合实现。 默认情况下,它使用快速排序,但如果快速排序进行了不公平的分区并且花费了超过(N*log(N))时间,它会切换到堆排序; 当数组的大小变小时,它切换到插入排序。

首先在第一个示例中,您使用时间复杂度为O(N*log(N)) sort函数对向量进行sort ,然后您将删除向量中的唯一元素,这将花费更多的时间,然后您在其中找到最大和最小元素一个最终将花费超过O(N*log(N))时间的向量。

在第二个示例中,您只是使用 *max_element 和 *min_element 查找最大和最小元素,其整体时间复杂度为 O(N) ,这显然优于O(N*log N)

或者,您可以简单地运行 for 循环来查找时间复杂度为O(N)的最大和最小元素。

排序(快速排序)的平均复杂度为O(n*log2(n))

查找数组的最小值或最大值的复杂度仅为O(n)

因此,第二个要快得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM