簡體   English   中英

在std :: sort()中完成的比較次數

[英]the number of comparisons done in std::sort()

在對帶有n個整數的向量進行排序時,如何計算標准C ++ STL排序函數中發生的比較次數?

一種快速,非侵入式的方法是使用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;

為了補充觀察方法,您可以閱讀文檔 關於復雜性, std::sort必須為:

O(N·log(N)),其中N =平均std :: distance(第一,最后)比較。 (直到C ++ 11)

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

顯然,big-O表示法可以掩蓋某些恆定因素,但總的來說,期望它與N·log(N)成比例(其中log是2的底數,就像所有良好的CS日志一樣)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM