根据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
吗?
答案 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