在std :: sort()中完成的比较次数

时间:2017-03-24 11:07:17

标签: c++ sorting

如何在对具有n个整数的向量进行排序时,如何计算标准C ++ STL排序函数中发生的比较次数?

2 个答案:

答案 0 :(得分:6)

一种快速,非侵入性的方法是使用lambda函数。如果您使用的是C ++ 11或更高版本,则可以使用lambda,如下所示:

unsigned int numComparisons = 0U;
std::vector<unsigned int> someContainer;
// Fill container, etc.
std::sort( 
    std::begin(someContainer), 
    std::end(someContainer),
    [&numComparisons]( unsigned int lhs, unsigned int rhs ) 
    {
        ++numComparisons;
        return lhs < rhs;
    }
);

std::cout << numComparisons << " comparisons were performed in std::sort" << std::endl;

答案 1 :(得分:2)

为了补充观察方法,您可以阅读the documentation。关于复杂性,std::sort必须是:

  

O(N·log(N)),其中N = std :: distance(first,last)平均比较。       (直到C ++ 11)

     

O(N·log(N)),其中N = std :: distance(第一个,最后一个)比较。       (自C ++ 11起)

显然,big-O表示法可以掩盖一些常数因素,但一般来说,期望它与N·log(N)成比例(其中日志是基数2,就像所有好的CS日志一样)。