在Java中按降序排序数组

时间:2017-11-12 19:09:48

标签: java arrays

此数组对Ascending中的数字进行排序并打印输出。我想把它改成下降,但我无法弄清楚..我尝试将+更改为 - 但它似乎没有用。有人可以告诉我如何做到这一点吗?

public class ArraysSorting {
    public static void main(String[] args) {
        int [] scores = { 5,8,2,9,3};
        sortArrayDesc (scores, scores.length);
    }

    public static void sortArrayDesc( int [] list, int listLength) {
        int index;
        int smallestIndex;
        int minIndex;

        int temp;
        for (index = 0; index < listLength - 1; index++) {
            smallestIndex = index;
            for (minIndex = index + 1;
                 minIndex < listLength; minIndex++)
                if (list[minIndex] < list[smallestIndex])
                    smallestIndex = minIndex;

            temp = list[smallestIndex];
            list[smallestIndex] = list[index];
            list[index] = temp;
        }

        //display data after sorting
        System.out.print("sorted array");
        for (index=0; index<listLength; index++) {
            System.out.print(list[index] + ",");
        }
    }
}

4 个答案:

答案 0 :(得分:0)

我建议你查看关于&#34;冒泡排序&#34;的文章,这与你在这里做的非常接近。然后,继续学习其他排序算法的工作原理。您通常不希望使用n平方排序算法。

要以相反的顺序进行排序,您可能希望使用smallestIndex变量来存储最大的索引。更改其中的名称,并使用>行上的if (list[minIndex] < list[smallestIndex])运算符查找最大数字。然后,您将在第一个列表位置存储最大数字,在最后一个列表位置存储最小数字。

更新的循环如下所示:

for (index = 0; index < listLength - 1; index++)
{
    biggestIndex = index;
    for (minIndex = index + 1; minIndex < listLength; minIndex++)
        if (list[minIndex] > list[biggestIndex])
            biggestIndex = minIndex;
    temp = list[biggestIndex];
    list[biggestIndex] = list[index];
    list[index] = temp;
}

答案 1 :(得分:0)

修改此代码以降序排序数组的一种简单方法是将比较运算符从小于(&lt;)更改为大于(&gt;)。

您的代码:

if (list[minIndex] < list[smallestIndex])

更改为:

if (list[minIndex] > list[smallestIndex])

您还应该更改变量命名,否则它没有意义。

答案 2 :(得分:0)

我刚做了一些修改。更改了变量名称和重要部分

if(list [maxIndex]&gt; list [largestIndex])//将小于号的符号改为大于

public class ArraysSorting {
    public static void main(String[] args) {
        int [] scores = { 5,8,2,9,3};
        sortArrayDesc (scores, scores.length);
    }

    public static void sortArrayDesc( int [] list, int listLength) {
        int index;
        int largestIndex;
        int maxIndex;
        int temp;
        for (index = 0; index < listLength - 1; index++) {
            largestIndex = index;
            for (maxIndex = index + 1;
                 maxIndex < listLength; maxIndex++)
                if (list[maxIndex] > list[largestIndex])
                    largestIndex = maxIndex;

            temp = list[largestIndex];
            list[largestIndex] = list[index];
            list[index] = temp;
        }

        //display data after sorting
        System.out.print("sorted array");
        for (index=0; index<listLength; index++) {
            System.out.print(list[index] + ",");
        }
    }
}

答案 3 :(得分:0)

听起来你想要一个&#34; for循环&#34;反向运行:

for (i = listLength; i>0; i--) {

    System.out.print(list[i] + ",");
}

你需要从

开始
list[listLength] 

并递增,直到到达列表/数组的开头

list[0].