没有条件的三种排序

时间:2015-02-08 12:54:07

标签: java algorithm conditional-statements

在为初学者阅读Java时,我偶然发现了一个练习:

  

编写一个从命令中获取三个int值的程序   行并按升序打印它们。使用Math.min()Math.max()

问题是尚未考虑if条件,所以逻辑上我不能使用它们。

我尝试在C中使用answer类似问题,但遇到not a statement错误。

public class three_sort
{
        public static void main(String[] args)
        {
                int a = Integer.parseInt( args[0] );
                int b = Integer.parseInt( args[1] );
                int c = Integer.parseInt( args[2] );

                int min = a;
                (min > b) && (min = b); //finding minimum
                (min > c) && (min = c); 
                System.out.println(min);

                int i = a;
                (b < max) && (b > min) && (i = b); // finding intermediate
                (c < max) && (c > min) && (i = c); 
                System.out.println(i);

                int max = a;
                (max < b) && (max = b); //finding maximum
                (max < c) && (max = c); 
                System.out.println(max);
        }
}

是的,我没有使用Math.minMath.max,因为在他们的帮助下我可以找到最小值和最大值,但找不到中间值。 有没有人知道如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

找到最小值和最大值后找到中间数字:

int a = Integer.parseInt( args[0] );
int b = Integer.parseInt( args[1] );
int c = Integer.parseInt( args[2] );
int x = Math.min(a, b);
int min = Math.min(x,c);
int z = Math.max(a, b);
int max = Math.max(z, c);
int mid = a+ b+ c- min - max;
System.out.print(min);
System.out.print(mid);
System.out.print(max);

对此我已经回答了另一个问题here,你可以看到它。

答案 1 :(得分:1)

不是一个完整的答案,但有些值得思考......

int a = 2;
int b = 5;
System.out.print(Math.min(a, b));
System.out.print(Math.max(a, b));

将按升序打印ab。你只需要将其概括为两个以上的数字......

答案 2 :(得分:1)

找到最小值非常简单,我们可以找到ab之间的最小值,比如min_a_b,然后是min_a_bc之间的最小值。同样的逻辑是最大的。

为了找到第二个更大的我们在每对之间取最大值。如果我们这样做,我们将只采取更大和更大的第二个。所以我们在它们之间采取最小值

int min_a_b = Math.min(a, b);
int max_a_b = Math.max(a, b);
int max_b_c = Math.max(b, c);
int max_a_c = Math.max(a, c);
System.out.println(Math.min(min_a_b, c));
System.out.println(Math.min(Math.min(max_a_b, max_b_c), max_a_c));
System.out.println(Math.max(max_a_b, c));