java基础进阶之数组排序-可能有你不知道的哦!!

1、使用Arrays类的sort方法

1.1、默认升序

        java中Arrays类提供了sort方法来进行快速排序,默认是升序的。

Arrays.sort(数组名)

private static void ArrSort1(int[] arr) {
        Arrays.sort(arr);
        System.out.println("快速排序-默认升序:"+Arrays.toString(arr));
    }

1.2、降序        

如果需要降序,写法如下:

//数组类型不能是基本数据类型

 Arrays.sort(数组名,Collections.reverseOrder())

private static void ArrSort2(int[] arr) {
        //数组类型不能是基本数据类型
        Integer[] arrayInteger = Arrays.stream(arr).boxed().toArray(Integer[]::new);
        Arrays.sort(arrayInteger, Collections.reverseOrder());
        System.out.println("快速排序-降序:"+Arrays.toString(arrayInteger));
    }

1.3、区间排序        

如果需要区间排序,写法如下:

//formIndex起始位置,toIndex结束位置

Arrays.sort(数组名,int formIndex, int toIndex)

private static void ArrSort3(int[] arr) {
        Arrays.sort(arr,1, 3);
        System.out.println("快速排序-区间排序:"+Arrays.toString(arr));
    }

1.4、重载排序

//数组类型不能是基本数据类型

Arrays.sort(数组名, new Comparator<数据类型对应的类>() {
    @Override
    public int compare(数据类型对应的类 o1, 数据类型对应的类 o2) {
        return 重载方式;
    }
});

private static void ArrSort4(int[] arr) {
        Integer[] arrayInteger = Arrays.stream(arr).boxed().toArray(Integer[]::new);
        Arrays.sort(arrayInteger, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println("快速排序-重载排序:"+Arrays.toString(arrayInteger));
    }
    private static void ArrSort5(int[] arr) {
        Integer[] arrayInteger = Arrays.stream(arr).boxed().toArray(Integer[]::new);
        //lambda表达式
        Arrays.sort(arrayInteger, (o1, o2) -> o2 - o1);
        System.out.println("快速排序-重载排序:"+Arrays.toString(arrayInteger));
    }

2、冒泡排序

        冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

        它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

        这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

2.1、原理

冒泡排序的原理如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2.2、示例图

2.3、时间复杂度

2.4、稳定性

        冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法

2.5、示例

   private static void ArrSortM(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 升序:如果左边的数大于右边的数,则交换,保证右边的数字最大
                // 降序:如果左边的数小于右边的数,则交换,保证右边的数字最小
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        System.out.println("冒泡排序:"+Arrays.toString(arr));
    }
    private static void ArrSortM1(int[] arr) {
        // 初始时 swapped 为 true,否则排序过程无法启动
        boolean swapped = true;
        for (int i = 0; i < arr.length - 1; i++) {
            // 如果没有发生过交换,说明剩余部分已经有序,排序完成
            if (!swapped) break;
            // 设置 swapped 为 false,如果发生交换,则将其置为 true
            swapped = false;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 如果左边的数大于右边的数,则交换,保证右边的数字最大
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    // 表示发生了交换
                    swapped = true;
                }
            }
        }
        System.out.println("冒泡排序1:"+Arrays.toString(arr));
    }

    private static void ArrSortM2(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 不添加参数的写法
                // 升序:如果左边的数大于右边的数,则交换,保证右边的数字最大
                // 降序:如果左边的数小于右边的数,则交换,保证右边的数字最小
                if (arr[j] > arr[j + 1]) {
                    arr[j + 1] = arr[j + 1] + arr[j];
                    arr[j] = arr[j + 1] - arr[j];
                    arr[j + 1] = arr[j + 1] - arr[j];
                }
            }
        }
        System.out.println("冒泡排序2:"+Arrays.toString(arr));
    }
    private static void ArrSortM3(int[] arr) {
        boolean swapped = true;
        // 最后一个没有经过排序的元素的下标
        int indexOfLastUnsortedElement = arr.length - 1;
        // 上次发生交换的位置
        int swappedIndex = -1;
        while (swapped) {
            swapped = false;
            for (int i = 0; i < indexOfLastUnsortedElement; i++) {
                if (arr[i] > arr[i + 1]) {
                    // 如果左边的数大于右边的数,则交换,保证右边的数字最大
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                    // 表示发生了交换
                    swapped = true;
                    // 更新交换的位置
                    swappedIndex = i;
                }
            }
            // 最后一个没有经过排序的元素的下标就是最后一次发生交换的位置
            indexOfLastUnsortedElement = swappedIndex;
        }
        System.out.println("冒泡排序3:"+Arrays.toString(arr));
    }

3、选择排序

3.1、原理

选择排序:通过不断选择数组中最小的元素,并将其放置在已排序部分的末尾,逐渐构建有序数组。

 3.2、示例图

 

3.3、时间复杂度

        选择排序的交换操作介于 0 和 (n - 1)次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

3.4、稳定性

        选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法

3.5、二元选择排序

        二元选择排序,每轮选择时记录最小值和最大值,可以把选择排序的效率提升一点,由于每一轮遍历可以排好两个数字,所以最外层的遍历只需遍历一半即可。

        经过优化之后,选择排序的效率提升了一点。但可惜的是,这样的优化无法改变时间复杂度,我们知道时间复杂度与常量系数无关,仍然是 O(n^2)。

3.6、示例

    private static void ArrSortX(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
        System.out.println("选择排序:"+ Arrays.toString(arr));
    }
    private static void ArrSortX1(int[] arr) {
        int minIndex, maxIndex;
        // i 只需要遍历一半
        for (int i = 0; i < arr.length / 2; i++) {
            minIndex = i;
            maxIndex = i;
            for (int j = i + 1; j < arr.length - i; j++) {
                if (arr[minIndex] > arr[j]) {
                    // 记录最小值的下标
                    minIndex = j;
                }
                if (arr[maxIndex] < arr[j]) {
                    // 记录最大值的下标
                    maxIndex = j;
                }
            }
            // 将最小元素交换至首位
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
            // 如果最大值的下标刚好是 i,由于 arr[i] 和 arr[minIndex] 已经交换了,所以这里要更新 maxIndex 的值。
            if (maxIndex == i) maxIndex = minIndex;
            // 将最大元素交换至末尾
            int lastIndex = arr.length - 1 - i;
            temp = arr[lastIndex];
            arr[lastIndex] = arr[maxIndex];
            arr[maxIndex] = temp;
        }
        System.out.println("选择排序1:"+ Arrays.toString(arr));
    }

4、插入排序

4.1、原理

        插入排序的思想非常简单,生活中有一个非常常见的场景:在打扑克牌时,我们一边抓牌一边给扑克牌排序,每次摸一张牌,就将它插入手上已有的牌中合适的位置,逐渐完成整个排序。

4.2、示例图

4.3、时间复杂度

        在插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较N- 1次,时间复杂度为O(N)  

        最坏的情况是待排序数组是逆序的,此时需要比较次数最多,总次数记为:1+2+3+…+N-1,所以,插入排序最坏情况下的时间复杂度为0(N*N)

        平均来说,A[1..j-1]中的一半元素小于A[j],一半元素大于A[j]。插入排序在平均情况运行时间与最坏情况运行时间一样,是输入规模的二次函数。

4.4、稳定性

        如果待排序的序列中存在两个或两个以上具有相同关键词的数据,排序后这些数据的相对次序保持不变,即它们的位置保持不变,通俗地讲,就是两个相同的数的相对顺序不会发生改变,则该算法是稳定的;如果排序后,数据的相对次序发生了变化,则该算法是不稳定的。关键词相同的数据元素将保持原有位置不变,所以该算法是稳定的。

4.5、示例

    private static void ArrSortC(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int key = arr[i];
            int j = i - 1;
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = key;
        }
    }

5、快速排序

        通过选择一个基准元素,将数组分成两部分,一部分小于基准元素,一部分大于基准元素,然后递归地对两部分进行排序。示例代码如下:

    private static void ArrSortK(int[] arr, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(arr, low, high);
            ArrSortK(arr, low, pivotIndex - 1);
            ArrSortK(arr, pivotIndex + 1, high);
        }
        System.out.println("快速排序:"+Arrays.toString(arr));
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[high];
        int i = low - 1;
        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        int temp = arr[i + 1];
        arr[i + 1] = arr[high];
        arr[high] = temp;
        return i + 1;
    }

6、归并排序

        通过将数组分成两部分,分别对两部分进行排序,然后将两个有序的部分合并成一个有序数组。示例代码如下:

   private static void ArrSortG(int[] arr, int low, int high) {
        if (low < high) {
            int mid = (low + high) / 2;
            ArrSortG(arr, low, mid);
            ArrSortG(arr, mid + 1, high);
            merge(arr, low, mid, high);
        }
        System.out.println("归并排序:"+Arrays.toString(arr));
    }
    private static void merge(int[] array, int low, int mid, int high) {
        int[] temp = new int[high - low + 1];
        int i = low;
        int j = mid + 1;
        int k = 0;
        while (i <= mid && j <= high) {
            if (array[i] <= array[j]) {
                temp[k++] = array[i++];
            } else {
                temp[k++] = array[j++];
            }
        }
        while (i <= mid) {
            temp[k++] = array[i++];
        }
        while (j <= high) {
            temp[k++] = array[j++];
        }
        for (int m = 0; m < temp.length; m++) {
            array[low + m] = temp[m];
        }
    }

 整体代码

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class TestArray2 {
    public static void main(String[] args) {
        int[] arr = {3, 2, 1, 5, 4};
        System.out.println("arr:"+Arrays.toString(arr));
        //输出方式
        //extracted(arr);

        //方法一:快速排序
        ArrSort1(arr);
//        ArrSort2(arr);
//        ArrSort3(arr);
//        ArrSort4(arr);
//        ArrSort5(arr);

        //方法二:冒泡方法
//        ArrSortM(arr);
//        ArrSortM1(arr);
//        ArrSortM2(arr);
//        ArrSortM3(arr);

        //方法三:选择排序
//        ArrSortX(arr);
//        ArrSortX1(arr);

        //方法四:插入排序
//        ArrSortC(arr);

        //方法五:快速排序
//        ArrSortK(arr,0,arr.length-1);

         //方法六:归并排序
//        ArrSortG(arr,0,arr.length-1);

    }

    private static void ArrSortG(int[] arr, int low, int high) {
        if (low < high) {
            int mid = (low + high) / 2;
            ArrSortG(arr, low, mid);
            ArrSortG(arr, mid + 1, high);
            merge(arr, low, mid, high);
        }
        System.out.println("归并排序:"+Arrays.toString(arr));
    }
    private static void merge(int[] array, int low, int mid, int high) {
        int[] temp = new int[high - low + 1];
        int i = low;
        int j = mid + 1;
        int k = 0;
        while (i <= mid && j <= high) {
            if (array[i] <= array[j]) {
                temp[k++] = array[i++];
            } else {
                temp[k++] = array[j++];
            }
        }
        while (i <= mid) {
            temp[k++] = array[i++];
        }
        while (j <= high) {
            temp[k++] = array[j++];
        }
        for (int m = 0; m < temp.length; m++) {
            array[low + m] = temp[m];
        }
    }

    private static void ArrSortK(int[] arr, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(arr, low, high);
            ArrSortK(arr, low, pivotIndex - 1);
            ArrSortK(arr, pivotIndex + 1, high);
        }
        System.out.println("快速排序:"+Arrays.toString(arr));
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[high];
        int i = low - 1;
        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        int temp = arr[i + 1];
        arr[i + 1] = arr[high];
        arr[high] = temp;
        return i + 1;
    }

    private static void ArrSortC(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int key = arr[i];
            int j = i - 1;
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = key;
        }
    }

    private static void ArrSortX(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
        System.out.println("选择排序:"+ Arrays.toString(arr));
    }
    private static void ArrSortX1(int[] arr) {
        int minIndex, maxIndex;
        // i 只需要遍历一半
        for (int i = 0; i < arr.length / 2; i++) {
            minIndex = i;
            maxIndex = i;
            for (int j = i + 1; j < arr.length - i; j++) {
                if (arr[minIndex] > arr[j]) {
                    // 记录最小值的下标
                    minIndex = j;
                }
                if (arr[maxIndex] < arr[j]) {
                    // 记录最大值的下标
                    maxIndex = j;
                }
            }
            // 将最小元素交换至首位
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
            // 如果最大值的下标刚好是 i,由于 arr[i] 和 arr[minIndex] 已经交换了,所以这里要更新 maxIndex 的值。
            if (maxIndex == i) maxIndex = minIndex;
            // 将最大元素交换至末尾
            int lastIndex = arr.length - 1 - i;
            temp = arr[lastIndex];
            arr[lastIndex] = arr[maxIndex];
            arr[maxIndex] = temp;
        }
        System.out.println("选择排序1:"+ Arrays.toString(arr));
    }

    private static void ArrSortM(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 升序:如果左边的数大于右边的数,则交换,保证右边的数字最大
                // 降序:如果左边的数小于右边的数,则交换,保证右边的数字最小
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        System.out.println("冒泡排序:"+Arrays.toString(arr));
    }
    private static void ArrSortM1(int[] arr) {
        // 初始时 swapped 为 true,否则排序过程无法启动
        boolean swapped = true;
        for (int i = 0; i < arr.length - 1; i++) {
            // 如果没有发生过交换,说明剩余部分已经有序,排序完成
            if (!swapped) break;
            // 设置 swapped 为 false,如果发生交换,则将其置为 true
            swapped = false;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 如果左边的数大于右边的数,则交换,保证右边的数字最大
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    // 表示发生了交换
                    swapped = true;
                }
            }
        }
        System.out.println("冒泡排序1:"+Arrays.toString(arr));
    }

    private static void ArrSortM2(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 不添加参数的写法
                // 升序:如果左边的数大于右边的数,则交换,保证右边的数字最大
                // 降序:如果左边的数小于右边的数,则交换,保证右边的数字最小
                if (arr[j] > arr[j + 1]) {
                    arr[j + 1] = arr[j + 1] + arr[j];
                    arr[j] = arr[j + 1] - arr[j];
                    arr[j + 1] = arr[j + 1] - arr[j];
                }
            }
        }
        System.out.println("冒泡排序2:"+Arrays.toString(arr));
    }
    private static void ArrSortM3(int[] arr) {
        boolean swapped = true;
        // 最后一个没有经过排序的元素的下标
        int indexOfLastUnsortedElement = arr.length - 1;
        // 上次发生交换的位置
        int swappedIndex = -1;
        while (swapped) {
            swapped = false;
            for (int i = 0; i < indexOfLastUnsortedElement; i++) {
                if (arr[i] > arr[i + 1]) {
                    // 如果左边的数大于右边的数,则交换,保证右边的数字最大
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                    // 表示发生了交换
                    swapped = true;
                    // 更新交换的位置
                    swappedIndex = i;
                }
            }
            // 最后一个没有经过排序的元素的下标就是最后一次发生交换的位置
            indexOfLastUnsortedElement = swappedIndex;
        }
        System.out.println("冒泡排序3:"+Arrays.toString(arr));
    }

    private static void ArrSort1(int[] arr) {
        Arrays.sort(arr);
        System.out.println("快速排序-默认升序:"+Arrays.toString(arr));
    }
    private static void ArrSort2(int[] arr) {
        //数组类型不能是基本数据类型
        Integer[] arrayInteger = Arrays.stream(arr).boxed().toArray(Integer[]::new);
        Arrays.sort(arrayInteger, Collections.reverseOrder());
        System.out.println("快速排序-降序:"+Arrays.toString(arrayInteger));
    }
    private static void ArrSort3(int[] arr) {
        Arrays.sort(arr,1, 3);
        System.out.println("快速排序-区间排序:"+Arrays.toString(arr));
    }
    private static void ArrSort4(int[] arr) {
        Integer[] arrayInteger = Arrays.stream(arr).boxed().toArray(Integer[]::new);
        Arrays.sort(arrayInteger, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println("快速排序-重载排序:"+Arrays.toString(arrayInteger));
    }
    private static void ArrSort5(int[] arr) {
        Integer[] arrayInteger = Arrays.stream(arr).boxed().toArray(Integer[]::new);
        //lambda表达式
        Arrays.sort(arrayInteger, (o1, o2) -> o2 - o1);
        System.out.println("快速排序-重载排序:"+Arrays.toString(arrayInteger));
    }

    private static void extracted(int[] arr) {
        System.out.println("原来的数组:"+ arr);
        //输出方式-for
        System.out.println("输出方式-for:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println("for循环输出:"+ arr[i]);
        }
        System.out.println("======================");
        //输出方式-for each
        System.out.println("输出方式-for each:");
        for (int i: arr){
            System.out.println("for each循环输出:"+i);
        }
        System.out.println("======================");
        //输出方式1-toString
        System.out.println("输出方式-toString:");
        System.out.println("toString:"+Arrays.toString(arr));
        System.out.println("======================");
    }

}
  • 40
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java中的Arrays类提供了许多操作数组的方法,其中包括对数组进行排序的方法。使用Arrays.sort()方法可以对数组进行排序,该方法可以对任何类型的数组进行排序,包括基本类型和对象类型。 例如,对一个整型数组进行排序,可以使用以下代码: int[] arr = {5, 2, 8, 1, 9}; Arrays.sort(arr); 排序后,数组arr的值为{1, 2, 5, 8, 9}。 如果要对一个字符串数组进行排序,可以使用以下代码: String[] arr = {"apple", "banana", "orange", "pear"}; Arrays.sort(arr); 排序后,数组arr的值为{"apple", "banana", "orange", "pear"}。 需要注意的是,Arrays.sort()方法会改变原始数组的顺序,如果需要保留原始数组的顺序,可以先将数组复制一份再进行排序。 ### 回答2: Java数组是一种很常见的数据类型,在实际开发中使用频率也很高。在Java中,对于数组的操作一般使用Arrays类来完成,该类提供了很多实用的方法,比如数组排序等。 数组排序是对数组中的元素进行排序的过程,可以按照升序或者降序排列。Java中使用Arrays类提供的sort方法对数组进行排序,方法的原型如下: public static void sort(数组名); 其中,数组名代表需要排序数组。如果数组中的元素为基本数据类型(如int、double等),则默认按照升序排列;如果数组中的元素为字符串类型,则按照字典序升序排列。 下面是一个示例代码,演示如何使用Arrays类对数组进行排序: ``` import java.util.Arrays; public class ArraySortDemo { public static void main(String[] args) { int[] nums = {3, 7, 1, 9, 5}; System.out.println("排序前:" + Arrays.toString(nums)); Arrays.sort(nums); System.out.println("排序后:" + Arrays.toString(nums)); } } ``` 代码执行结果如下: ``` 排序前:[3, 7, 1, 9, 5] 排序后:[1, 3, 5, 7, 9] ``` 可以看到,排序前的数组为3、7、1、9、5,排序后的数组为1、3、5、7、9,按照升序排列。 除了按照升序排列之外,还可以按照降序排列。可以使用Arrays类的sort方法,同时指定排序算法排序方式,如下所示: ``` import java.util.Arrays; import java.util.Collections; public class ArraySortDemo { public static void main(String[] args) { Integer[] nums = {3, 7, 1, 9, 5}; System.out.println("排序前:" + Arrays.toString(nums)); Arrays.sort(nums, Collections.reverseOrder()); System.out.println("排序后:" + Arrays.toString(nums)); } } ``` 代码执行结果如下: ``` 排序前:[3, 7, 1, 9, 5] 排序后:[9, 7, 5, 3, 1] ``` 可以看到,本次使用了Collections类提供的reverseOrder方法,将排序方式指定为降序。 综上所述,通过Arrays类提供的sort方法,我们可以很轻松地对数组进行排序。但是需要注意的是,如果数组中的元素为自定义类型,需要在自定义类型中实现Comparable接口或者Comparator接口,并重写compareTo方法或compare方法,才能实现对数组排序。 ### 回答3: Java中自带了一个Arrays类,其中包含了对数组排序的方法。Arrays类中的sort()方法可以以升序降序的形式对数组进行排序。下面就介绍一下如何使用sort()方法对数组进行排序。 首先,我们创建一个数组,然后使用sort()方法对其进行排序。 ``` int[] arr = {10, 5, 8, 20, 13}; Arrays.sort(arr); ``` 上面的代码会将数组arr按照从小到大的顺序进行排序。我们可以输出一下排序后的结果。 ``` for (int i : arr) { System.out.print(i + " "); } ``` 运行上面的代码可以看到输出结果为:5 8 10 13 20。 除了按照从小到大的顺序排序外,sort()方法还可以按照从大到小的顺序对数组进行排序。我们只需要添加一个比较器即可。 ``` int[] arr2 = {10, 5, 8, 20, 13}; Arrays.sort(arr2, Collections.reverseOrder()); ``` 上面的代码会将数组arr2按照从大到小的顺序进行排序。我们同样输出一下排序后的结果。 ``` for (int i : arr2) { System.out.print(i + " "); } ``` 运行上面的代码可以看到输出结果为:20 13 10 8 5。 除了对int类型的数组进行排序,sort()方法也支持对其他类型的数组进行排序,比如String、Double等。 总的来说,使用Arrays类中的sort()方法可以非常方便地对数组进行排序,提高我们的开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清爽的暗之妖刀0369

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值