在不使用数组或循环的情况下,找到五个给定数字中第三大的最快方法?

时间:2014-01-16 00:30:13

标签: java algorithm math logic mathematical-optimization

我正在考虑一种逻辑,即在不使用数组或循环的情况下找到五个给定数字的第三大数,但可以使用条件。

Here是斯蒂芬c找到三重中间值的最快方法。我想创建一个逻辑 5个数字找到第三大。

我希望尽可能减少比较,以找到最佳解决方案。

2 个答案:

答案 0 :(得分:1)

不是最有效的,但至少它是可读的。

int median(int a, int b, int c, int d, int e) 
{
    if (a > b) swap(a, b);
    if (a > c) swap(a, c);
    if (a > d) swap(a, d);
    if (a > e) swap(a, e);

    if (b > c) swap(b, c);
    if (b > d) swap(b, d);
    if (b > e) swap(b, e);

    if (c > d) swap(c, d);
    if (c > e) swap(c, e);

    return c;
}

答案 1 :(得分:1)

这个怎么样?

public static int getMiddle(int a, int b, int c, int d, int e){

    int temp;

    if(a>b){
        temp=b; b=a; a=temp;
    }
    if(b>c){
        temp=c; c=b; b=temp;
    }
    if(c>d){
        temp=d; d=c; c=temp;
    }
    if(d>e){
        temp=e; e=d; d=temp;
    }

    if( e>d && d>c && c>b && b>a )
        return c;
    else
        return getMiddle(a, b, c, d, e);
}

注意:根据5个数字的值,我强烈认为您无法减少必须进行的总比较,但您只能简化或优化比较方式。