小编sta*_*rst的帖子

为什么std :: nth_element返回N <33个元素的输入向量的排序向量?

std::nth_element用来得到一个(大致正确的)值的向量百分位数,如下所示:

double percentile(std::vector<double> &vectorIn, double percent)
{
    std::nth_element(vectorIn.begin(), vectorIn.begin() + (percent*vectorIn.size())/100, vectorIn.end());

    return vectorIn[(percent*vectorIn.size())/100];
}  
Run Code Online (Sandbox Code Playgroud)

我注意到,对于vectorIn长度最多为32个元素,向量将完全排序.从33个元素开始,它永远不会被排序(如预期的那样).

不确定这是否重要,但功能是在"(Matlab-)mex c ++代码"中,通过Matlab使用"Microsoft Windows SDK 7.1(C++)"编译.

编辑:

还参见传递给函数的1e5向量中最长排序块的长度的以下直方图(包含1e4个随机元素和随机百分位数的向量).注意非常小的峰值.

长度的直方图排序块

c++ sorting algorithm mex nth-element

7
推荐指数
1
解决办法
1358
查看次数

标签 统计

algorithm ×1

c++ ×1

mex ×1

nth-element ×1

sorting ×1