partial_sort与nth_element的复杂性

时间:2015-07-02 22:27:39

标签: c++ algorithm time-complexity

根据cppreference.com,C ++ STL排序算法的复杂性是:

sort:O(N log(N))

partial_sort:"约" O(N log(M)),其中M是距离(中间第一个)

nth_element:"平均而言#34; O(N)

然而,这似乎意味着,您可以使用partial_sort而不是nth_element进行排序,然后对第一个范围进行排序,以给出总体复杂度为O(N + M log(M) )),这比O(N log(M))好一点。这是真的吗?我最好避免partial_sort吗?

2 个答案:

答案 0 :(得分:0)

经过大量测试后,partial_sort似乎对我的用例更快。我怀疑了 - 但这似乎证实了这一点。

答案 1 :(得分:0)

partial_sort将对您感兴趣的M个元素执行部分排序。nth_element仅会给您一个数组,这样放置第n个元素时,左侧的所有元素都较小,而右侧的所有元素都较大。

将partial_sort用于一些用例,例如,按排名顺序从一百万个结果中获取前十个结果。使用nth_element查找数组的中位数,或找出谁在考试结果中排名第十。

如果仅对两者的性能特征感兴趣,则对于较小的M值,partial_sort的性能将优于nth_element(约10,000)。有关此内容的详细分析,请参见:https://www.youtube.com/watch?v=-0tO3Eni2uo