c++ - 以 3 函数的中位数进行的比较次数?

标签 c++ algorithm median

截至目前,我的函数找到 3 个数字的中位数并对它们进行排序,但它总是进行 3 次比较。我在想我可以在某处使用嵌套的 if 语句,这样有时我的函数只会进行两次比较。

int median_of_3(int list[], int p, int r)
{
    int median = (p + r) / 2;

    if(list[p] > list[r])
        exchange(list, p, r);
    if(list[p] > list[median])
        exchange(list, p, median);
    if(list[r] > list[median])
        exchange(list, r, median);

    comparisons+=3;                // 3 comparisons for each call to median_of_3

    return list[r];
}

我不确定我在哪里可以创建嵌套的 if 语句。

最佳答案

如果您只需要中值,这里有一个基于最小/最大运算符的无分支解决方案:

中位数 = max(min(a,b), min(max(a,b),c));

Intel CPU 具有 SSE 最小/最大 vector 指令,因此根据您或您的编译器的矢量化能力,它可以运行得非常快。

关于c++ - 以 3 函数的中位数进行的比较次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12937732/

相关文章:

java - 递归反转链表的 C/C++ 到 Java 翻译

c++ - 是否有解释冒号和逗号符号的解析器?

algorithm - 你能帮我确定这个应用程序的四舍五入吗?

parallel-processing - 大型数组中位数的并行计算

image - 在 Matlab 中计算中值图像

c++ - 模板类的实例之间是否有共享范围?

c++ - 当你有类层次结构时,方法的调用顺序是什么?

algorithm - 时间、空间复杂度和 O 表示法问题

c# - Array.Reverse算法?

arrays - Excel-根据分数的投票制作数组