在Java中对数组进行排序

198

我试图制作一个由10个随机值整数组成的程序,目前为止还不错。

然而,现在我需要将它们按从小到大的顺序排序,然后将其打印到屏幕上,我该怎么做?

(对于如此小的程序,我有很多代码,对于循环不是很熟练,在Java中刚开始工作)

public static void main(String args[])
{
    int [] array = new int[10];

    array[0] = ((int)(Math.random()*100+1));
    array[1] = ((int)(Math.random()*100+1));
    array[2] = ((int)(Math.random()*100+1));
    array[3] = ((int)(Math.random()*100+1));
    array[4] = ((int)(Math.random()*100+1));
    array[5] = ((int)(Math.random()*100+1));
    array[6] = ((int)(Math.random()*100+1));
    array[7] = ((int)(Math.random()*100+1));
    array[8] = ((int)(Math.random()*100+1));
    array[9] = ((int)(Math.random()*100+1));

    System.out.println(array[0] +" " + array[1] +" " + array[2] +" " + array[3]
    +" " + array[4] +" " + array[5]+" " + array[6]+" " + array[7]+" " 
    + array[8]+" " + array[9] );        

}
19个回答

220
在println之前添加这一行代码,你的数组将会被排序。
Arrays.sort( array );

15
可以给我一个例子,如何在我的程序中使用它? - Lukas
如何按降序或基于任何条件排序?是否有可能以某种方式传递lambda函数? - PlsWork

220

循环对学习非常有用,特别是在使用数组时。

int[] array = new int[10];
Random rand = new Random();
for (int i = 0; i < array.length; i++)
    array[i] = rand.nextInt(100) + 1;
Arrays.sort(array);
System.out.println(Arrays.toString(array));
// in reverse order
for (int i = array.length - 1; i >= 0; i--)
    System.out.print(array[i] + " ");
System.out.println();

46

通过自己实现可能有助于您理解循环。 请参见冒泡排序易于理解:

public void bubbleSort(int[] array) {
    boolean swapped = true;
    int j = 0;
    int tmp;
    while (swapped) {
        swapped = false;
        j++;
        for (int i = 0; i < array.length - j; i++) {
            if (array[i] > array[i + 1]) {
                tmp = array[i];
                array[i] = array[i + 1];
                array[i + 1] = tmp;
                swapped = true;
            }
        }
    }
}

当然,你不应该在生产环境中使用它,因为有更好的算法适用于大型列表,比如通过Arrays.sort(array)实现的快速排序(QuickSort)归并排序(MergeSort)


BubbleSort绝对是初学者学习的好算法,但正如您所提到的,QuickSort或MergeSort在处理更大的数据集时表现更好,这些算法也是Arrays.sort(array)方法使用的算法,因此感谢您提到这一点,让任何可能没有意识到的人知道。 - h0r53
我点赞这个答案,因为它很可能被初学者搜索到,而初学者应该知道如何自己实现一个排序函数。 - Carrm
由于最初的问题是关于对包含10个整数的数组进行排序,因此冒泡排序完全可以接受。如果没有期望有更大的输入,那么无论是生产环境还是非生产环境都可以使用。 - Andrew

27

3
我可以为您提供一个在程序中如何使用它的例子吗? - Lukas

23

我很懒,所以添加了循环

import java.util.Arrays;


public class Sort {
    public static void main(String args[])
    {
        int [] array = new int[10];
        for ( int i = 0 ; i < array.length ; i++ ) {
            array[i] = ((int)(Math.random()*100+1));
        }
        Arrays.sort( array );
        for ( int i = 0 ; i < array.length ; i++ ) {
            System.out.println(array[i]);
        }
    }
}

你的数组长度为10。你需要一个变量(i),它的值从09

for ( int i = 0  ; i < array.length ;   i++ ) 
       ^               ^                   ^
       |               |                   ------  increment ( i = i + 1 )
       |               |
       |               +-------------------------- repeat as long i < 10
       +------------------------------------------ start value of i


Arrays.sort( array );

这是一个排序数组的库方法。


20
Arrays.sort(yourArray)

可以完美地完成工作


11

按自然顺序排序: Arrays.sort(array)

按照相反的顺序排序: Arrays.sort(array, Collections.reverseOrder()); --> 这是Collections类中的一个静态方法,它将进一步调用其内部类来返回一个反向的比较器。


4
反转解决方案对于基元类型不起作用,不幸的是。 IntStream.range(0,size).map(i-> array [size-i-1]).toArray();做到了。 size = array.length; - Andrei Konstantinov

8
int[] array = {2, 3, 4, 5, 3, 4, 2, 34, 2, 56, 98, 32, 54};

for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array.length; j++) {
        if (array[i] < array[j]) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}

7
您可以使用 Arrays.sort( array ) 对整型数组进行排序。

1
我能得到一个如何在我的程序中使用它的例子吗? - Lukas

7
请见下文,它将为您提供按升序和降序排序的结果
import java.util.Arrays;
import java.util.Collections;

public class SortTestArray {

/**
 * Example method for sorting an Integer array
 * in reverse & normal order.
 */
public void sortIntArrayReverseOrder() {

    Integer[] arrayToSort = new Integer[] {
        new Integer(48),
        new Integer(5),
        new Integer(89),
        new Integer(80),
        new Integer(81),
        new Integer(23),
        new Integer(45),
        new Integer(16),
        new Integer(2)
    };

    System.out.print("General Order is    : ");

    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }


    Arrays.sort(arrayToSort);

    System.out.print("\n\nAscending Order is  : ");

    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }


    Arrays.sort(arrayToSort, Collections.reverseOrder());
    System.out.print("\n\nDescinding Order is : ");
    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }

}


/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    SortTestArray SortTestArray = new SortTestArray();
    SortTestArray.sortIntArrayReverseOrder();
}}

输出结果将会是:
General Order is    : 48 5 89 80 81 23 45 16 2 

Ascending Order is  : 2 5 16 23 45 48 80 81 89 

Descinding Order is : 89 81 80 48 45 23 16 5 2 

注意: 你可以使用Math.random代替手动添加数字。如果需要更改代码,请告诉我...

祝你好运... 干杯!!!


当你可以使用 int 时,不应该使用 Integer,因为这样会导致速度变慢。 - Jonas Czech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接