partial_sort_copy是最快的C部分排序吗?

考虑以下函数,中位数:
real_t median(const std::initializer_list<real_t> vars) {
    real_t tmp[15];
    const unsigned x = vars.size() / 2;
    if (x & 1) {
      std::partial_sort_copy(vars.begin(),vars.end(),&tmp[0],&tmp[x]);
      return tmp[x];
    }
    const unsigned y = x + 1;
    std::partial_sort_copy(vars.begin(),&tmp[y]);
    return (tmp[x] + tmp[y]) / 2;
  }

我正在使用部分排序来降低复杂性,因为我只需要排序列表的一半.

此外,我假设std :: partial_sort_copy比std :: partial_sort或std :: nth_element更快,因为排序算法(It1!= It2)中没有必要的混洗.我的假设是否正确?

注意:假设real_t可能是双倍的,所以请不要批评使用除法.

NBB:我使用-pedantic和vars已知不超过15个元素.

解决方法

如果我可以选择,我会去一个部分Quicksort.

Info on Partial Quicksort

但是如果你必须比较这两个只是…那么部分排序更好vs部分排序副本.这里有更多关于这两种方法的信息:

Info on Partial Sort

Info on Partial Sort Copy

在这里,您还可以找到部分Quicksort的算法代码示例 – 它在C和matlab中实现:

Example – Partial Quicksort

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...