gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:26:07 32 4
gpt4 key购买 nike

截至目前,我的函数找到 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com