Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用数组或循环查找五个给定数字中第三大的最快方法?_Java_Algorithm_Math_Logic_Mathematical Optimization - Fatal编程技术网

Java 不使用数组或循环查找五个给定数字中第三大的最快方法?

Java 不使用数组或循环查找五个给定数字中第三大的最快方法?,java,algorithm,math,logic,mathematical-optimization,Java,Algorithm,Math,Logic,Mathematical Optimization,我正在考虑一种逻辑,可以在不使用数组或循环的情况下找到五个给定数字中的第三大数字,但可以使用条件 是stephen c.找到三元组中间值的最快方法。我想创建一个逻辑 5个数字找到第三大 我希望尽可能减少比较,以找到最佳解决方案。不是最有效的,但至少它是可读的 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 &

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

是stephen c.找到三元组中间值的最快方法。我想创建一个逻辑 5个数字找到第三大


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

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

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;
}
这个怎么样

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个数字的值,我强烈认为您不能减少必须进行的总比较,但您只能简化或优化进行比较的方式

有意思,在这里会发现这样一个疯子吗?:)我猜您必须进行的比较的数量呈指数级增长,所以请为真正难看的代码做好准备。使用递归方法如何?是否将其视为循环?;-)@RafaEl让我们看看,在五个数字的情况下,递归没有问题。可能的重复根据Knuth的AOCP,最小值是6个比较。