C# 求三个整数中值的最有效方法

C# 求三个整数中值的最有效方法,c#,median,C#,Median,不使用如下示例中的数组,找到三个整数的中值最有效的方法是: int[] median = {int a, int b,int c}; Array.Sort(median); int medianValue = median[1]; 我所知道的最快的方法就是使用 max(最小(a,b),最小(最大(a,b,c)) 我相信C#对min和max采用两个参数进行了优化。由于分支,这将比使用if语句更快 还有其他窍门:可以使用XOR和

不使用如下示例中的数组,找到三个整数的中值最有效的方法是:

int[] median = {int a, int b,int c};
Array.Sort(median); 

int medianValue = median[1];

我所知道的最快的方法就是使用

max(最小(a,b),最小(最大(a,b,c))

我相信C#对
min
max
采用两个参数进行了优化。由于分支,这将比使用
if
语句更快

还有其他窍门:可以使用XOR和<实现最小值和最大值,但我怀疑这对现代体系结构有什么好处。

intmedian(intnum1,intnum2,intnum3)
    int Median(int num1, int num2, int num3)
    {
        if ((num2 < num1 && num1 < num3) || (num2 > num1 && num1 > num3))
        {
            return num1;
        }

        if ((num1 < num2 && num2 < num3) || (num1 > num2 && num2 > num3))
        {
            return num2;
        }

        return num3;
    }
{ if((num2num1&&num1>num3)) { 返回num1; } 如果((num1num2&&num2>num3)) { 返回num2; } 返回num3; }
使用两个模拟排序的
if
语句。如果您的集合始终仅限于3个元素,则无需担心效率。您迄今为止做了哪些尝试,以及您的实现中存在哪些问题?@Jeroenvanevel您能用2个if与我们分享解决方案吗?@Stenperov:取消删除您的帖子,你的第二句话(我编辑过)有一个小错误。@stenportov:很可能你是对的。我的优化来自C和C++世界,在那里,现代芯片组肯定会有快速实现<代码> MIN <代码>和 max ,编译器会利用它。LINQPad中的1000万次执行测试:当编译器优化关闭时,3-IF链以与min/max(+/1%)相同的速度执行。当优化启动时,最小/最大执行速度将提高50%以上。请在您的答案中编辑一些内容,以便我可以取消投票。