Java:未排序的数组到降序排序数组

时间:2017-05-15 13:05:19

标签: java

我是初学者学习java,我试图将数组中的变量按降序传递给另一个数组。这是我的代码:

    int num[] = new int[6];
    int DecSort[] = new int[6];
    System.out.println("Input 6 numbers: ");
    for (int i = 0; i < 6; i++) {
        num[i] = Integer.parseInt(br.readLine());
    }
    //sorted array is descending
    int max = num[0];
    int maxpos = 0;
    for (int j = 0; j < 6; j++) {
        for (int i = 0; i < 6; i++) {
            if (num[i] > max) {
                max = num[i];
                maxpos = i;
            }
        }
        DecSort[j] = max;
        max = num[0];
        num[maxpos] = Integer.MIN_VALUE;
    }

    System.out.println("sorted array");
    for (int i = 0; i < 6; i++) {
        System.out.println(DecSort[i]);
    }

当我输入213,45,1234,765,23,5作为数组时,它输出: 排序数组 1234 765 213 213 213 213

我不确定我的错误在哪里,请帮忙!

3 个答案:

答案 0 :(得分:0)

问题是您正在将max初始化为num[0]。这意味着将永远不会找到数组中小于第一个数字的任何数字,因为num[i] > max始终为false。您可以通过将max的初始值设置为Integer.MIN_VALUE来解决此问题。

但是,您是否知道Java标准库已具有排序功能。您可以使用它按升序对数组进行排序,然后反向打印它:

int num[] = new int[6];
System.out.println("Input 6 numbers: ");
for (int i = 0; i < 6; i++) {
    num[i] = Integer.parseInt(br.readLine());
}

Arrays.sort(num);

System.out.println("sorted array");
for (int i = 5; i >= 0; --i) {
    System.out.println(num[i]);
}

如果你需要的话,我会告诉你如何将升序阵列变成降序阵列。 ;)

或者,使用NavigableSet,您甚至可以让Java在运行中为您排序:

NavigableSet<Integer> nums = new TreeSet<>();
System.out.println("Input 6 numbers: ");
for (int i = 0; i < 6; i++) {
    nums.add(Integer.valueOf(br.readLine()));
}

Integer[] sortedNums = nums.descendingSet().toArray(new Integer[6]);

答案 1 :(得分:0)

我只更改了一些代码:

1 - 删除了 DecSort 数组,因为它不需要。

2 - 应用冒泡排序降序算法。

3 - 将de break条件更改为 ,以便用于任何大小的数组。

看看:

public void orderDescending() {
    int num[] = { 213, 45, 1234, 765, 23, 5 };
    // sorted array is descending
    int maxpos = 0;
    for (int j = 0; j < num.length; j++) {
        for (int i = j; i < num.length - 1; i++) {
            if (num[i] > num[j]) {
                int tempA = num[i];
                num[i] = num[j];
                num[j] = tempA;
            }
        }
    }

    System.out.println("sorted array");
    for (int i = 0; i < 6; i++) {
        System.out.println(num[i]);
    }
}

只需进行一些修改并且完美无缺!

答案 2 :(得分:0)

可以创建Comparator,可以控制升序和降序。

Comparator<Integer> comparator = new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            return o2.compareTo(o1);
        }
    };

    // option 1
    Integer[] array = new Integer[] { 1, 24, 4, 4, 345 };
    Arrays.sort(array, comparator);