Java教程

Java如何对数组进行排序

排序是一种以一定顺序排列列表或数组元素的方法。该顺序可以是升序或降序。 数字词典顺序(字母顺序)是一种广泛使用的顺序。
在本节中,我们将学习 如何对数组进行排序在Java中使用 升序降序使用 sort()方法,而 sort()方法。除此之外,我们还将在 Java 中学习 如何对子数组进行排序

按升序排列数组

升序将元素从低到高排列。也称为 自然顺序数字顺序。我们可以通过以下方式执行排序:
使用sort()方法 不使用方法
    使用for循环 使用用户定义的方法

使用sort()方法

在Java中, 数组提供 sort()方法以按升序对数组进行排序的java.util 包。它使用 Dual-Pivot快速排序算法进行排序。它的复杂度为 O(n log(n))。这是一个 static 方法,该方法将 数组解析为参数,并且不返回任何内容。我们可以使用类名直接调用它。它接受类型为int,float,double,long,char,byte的数组。
语法:
public static void sort(int[] a)
其中 a 是短数组。
注意: 类似于Arrays类,Collections类还提供了sort()方法来对数组进行排序。但是它们之间是有区别的。 Arrays类的sort()方法适用于原始类型,而Collections类的sort()方法适用于对象Collection,例如LinkedList,ArrayList等。
让我们使用Arrays类的sort()方法对数组进行排序。
在下面的程序中,我们定义了一个整数类型的数组。之后,我们调用了Arrays类的sort()方法并解析要排序的数组。为了打印排序后的数组,我们使用了for循环。
SortArrayExample1.java
import java.util.Arrays;
public class SortArrayExample1{
    public static void main(String[] args) {
        //defining an array of integer type
        int [] array = new int [] {
        90, 23, 5, 109, 12, 22, 67, 34}
        ;
        //invoking sort() method of the Arrays class
        Arrays.sort(array);
        System.out.println("Elements of array sorted in ascending order: ");
        //prints array using the for loop
        for (int i = 0;i <array.length;i++) {
            System.out.println(array[i]);
        }
    }
}
输出:
Array elements in ascending order:
5
12
22
23
34
67
90
109
在上面的程序中,我们还可以使用 Arrays class的toSting()方法进行打印数组,如以下语句所示。它返回指定数组的字符串表示形式。
System.out.printf(Arrays.toString(array));

使用for循环

在下面的示例中,我们初始化了一个整数类型的数组,并且
SortArrayExample2.java
public class SortArrayExample2 {
    public static void main(String[] args) {
        //creating an instance of an array
        int[] arr = new int[] {78, 34, 1, 3, 90, 34, -1, -4, 6, 55, 20, -65};
        System.out.println("Array elements after sorting:");
        //sorting logic
        for (int i = 0;i <arr.length;i++) {
            for (int j = i + 1;j <arr.length;j++) {
                int tmp = 0;
                if (arr[i] >arr[j]) {
                    tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
            //prints the sorted element of the array
        System.out.println(arr[i]);
        }
    }
}
输出:
Array elements after sorting:
-65
-4
-1
1
3
6
20
34
34
55
78
90

使用用户定义的方法

在下面的示例中,我们定义了一个名为 sortArray()的方法,该方法包含对数组进行排序的逻辑
SortArrayExample3.java
public class SortArrayExample3 {
    public static void main(String[] args) {
        int i;
        //initializing an array
        int array[] = {12, 45, 1, -1, 0, 4, 56, 23, 89, -21, 56, 27};
        System.out.print("Array elements before sorting: \n");
        for(i = 0;i <array.length;i++)
        System.out.println(array[i]);
        //invoking user defined method
        sortArray(array, array.length);
        System.out.print("Array elements after sorting: \n");
        //accessing elements of the sorted array
        for(i = 0;i <array.length;i++) {
            System.out.println(array[i]);
        }
    }
    //user defined method to sort an array in ascending order
    private static void sortArray(int array[], int n) {
        for (int i = 1;i <n;i++) {
            int j = i;
            int a = array[i];
            while ((j >0) &&(array[j-1] >a)) {
                array[j] = array[j-1];
                j--;
            }
            array[j] = a;
        }
    }
}
输出:
Array elements before sorting:
12
45
1
-1
0
4
56
23
89
-21
56
27
Array elements after sorting:
-21
-1
0
1
4
12
23
27
45
56
56
89

按降序排列数组

降序将元素从高到低排列。我们可以通过以下方式执行排序:
使用 reverseOrder()方法 不使用方法
    使用 for 循环 使用用户定义的方法

使用reverseOrder()方法

Java Collections 类提供了 reverseOrder()方法,以反向字典顺序对数组进行排序。这是一个静态方法,因此我们可以使用类名直接调用它。它不解析任何参数。它返回一个 比较器,强加自然顺序(升序)的相反。
这意味着数组通过使用sort()方法以升序对元素进行排序,之后,reverseOrder()方法将反转自然顺序,然后我们以降序获得排序后的数组。
语法:
public static <T> Comparator<T> reverseOrder()
假设a []是要按降序排序的数组。我们将通过以下方式使用reverseOrder()方法:
Arrays.sort(a, Collections.reverseOrder());
让我们按降序对数组进行排序。
在下面的程序中,要注意的一点是,我们已将数组定义为 Integer 。因为reverseOrder()方法不适用于原始数据类型。
SortArrayExample4.java
import java.util.Arrays;
import java.util.Collections;
public class SortArrayExample4 {
    public static void main(String[] args) {
        Integer [] array = {23, -9, 78, 102, 4, 0, -1, 11, 6, 110, 205};
        // sorts array[] in descending order
        Arrays.sort(array, Collections.reverseOrder());
        System.out.println("Array elements in descending order: " +Arrays.toString(array));
    }
}
输出:
Array elements in descending order: [205, 110, 102, 78, 23, 11, 6, 4, 0, -1, -9]
让我们看看另一个按字母顺序对数组元素进行排序的程序。
SortArrayExample5.java
import java.util.Arrays;
import java.util.Collections;
public class SortArrayExample5 {
    public static void main(String[] args) {
        String [] strarray = {"Mango", "Apple", "Grapes", "Papaya", "Pineapple", "Banana", "Orange"};
        // sorts array[] in descending order
        Arrays.sort(strarray, Collections.reverseOrder());
        System.out.println("Array elements in descending order: " +Arrays.toString(strarray));
    }
}
输出:
Array elements in descending order: [Papaya, Pineapple, Orange, Mango, Grapes, Banana, Apple]

使用for循环

在下面的示例中,我们初始化了一个整数数组并执行排序
SortArrayExample6.java
public class SortArrayExample6 {
    public static void main(String[] args) {
        int temp;
        //initializing an array
        int a[]={12,5,56,-2,32,2,-26,9,43,94,-78};
        for (int i = 0;i <a.length;i++) {
            for (int j = i + 1;j <a.length;j++) {
                if (a[i] <a[j]) {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        System.out.println("Array elements in descending order:");
        //accessing element of the array
        for (int i = 0;i <=a.length - 1;i++) {
            System.out.println(a[i]);
        }
    }
}
输出:
Array elements in descending order:
94
56
43
32
12
9
5
2
-2
-26
-78

使用用户定义的方法

SortArrayExample7.java
import java.util.Scanner;
public class SortArrayExample7 {
    public static void main(String[] args) {
        int n, temp;
        Scanner s = new Scanner(System.in);
        System.out.print("Enter the number of elements: ");
        n = s.nextInt();
        int a[] = new int[n];
        System.out.println("Enter the elements of the array: ");
        for (int i = 0; i <n;i++) {
            a[i] = s.nextInt();
        }
        for (int i = 0; i <n;i++) {
            for (int j = i + 1;j <n;j++) {
                if (a[i] < a[j]) {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        System.out.println("Array elements in descending order:");
        for (int i = 0; i < n - 1; i++) {
            System.out.println(a[i]);
        }
        System.out.print(a[n - 1]);
    }
}
输出:
Enter the number of elements: 7
Enter the elements of the array:
12
5
56
-2
32
2
-26
Array elements in descending order:
56
32
12
5
2
-2
-26

如何对子数组进行排序

从该数组派生的数组称为 subarray 。假设 a[] 是一个包含元素[12、90、34、2、45、3、22、18、5、78]的数组,并且我们想对数组元素从34到18进行排序它将对子数组 [34、2、45、3、22、18] 进行排序,并保持其他元素不变。
要对子数组进行排序,请使用Arrays类提供名为 sort()的静态方法。它将指定范围的数组按升序排序。我们还可以对类型为 long,double,float,char,byte,等的数组进行排序。
语法:
public static void sort(int[] a, int fromIndex, int toIndex)
该方法解析以下三个参数:
a 要排序的数组。 fromIndex 子数组的第一个元素的索引。它参与排序。 toIndex: 子数组的最后一个元素的索引。它不参与排序。
如果formIndex等于toIndex,则要排序的范围为空。如果 fomIndex大于toIndex ,则抛出IllegalArgumentException。如果 fromIndex <0或toIndex> a.length ,也会引发ArrayIndexOutOfBoundsException。
让我们通过Java程序对子数组进行排序。
SortSubarrayExample。 Java
import java.util.Arrays;
public class SortSubarrayExample {
    public static void main(String[] args) {
        //defining an array
        int[] a = {12, 90, 34, 2, 45, 3, 22, 18, 5, 78};
        // sorts subarray form index 2 to 7
        Arrays.sort(a, 2, 7);
        //prints array using the for loop
        for (int i = 0;i <a.length;i++) {
            System.out.println(a[i]);
        }
    }
}
输出:
Sorted Subarray:
12
90
2
3
22
34
45
18
5
78

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4