数组的排序

数组的排序

排序是指将数组元素按照从大到小或从小到大的顺序重新排列。

Arrays.sort() 方法

Java 提供了 Arrays.sort() 方法,可以对数组进行升序(从小到大)排序,位于 java.util.Arrays 类中。

import java.util.Arrays;

Integer[] a = {1, 24, 56, 78, 76, 342, 65, 4};
Arrays.sort(a);Code language: JavaScript (javascript)

排序后数组 a 变为:

[1, 4, 24, 56, 65, 76, 78, 342]Code language: JSON / JSON with Comments (json)

示例代码

import java.util.Arrays;
import java.util.List;

public static void main(String[] args) {
    Integer[] a = {1, 24, 56, 78, 76, 342, 65, 4};
    Arrays.sort(a);

    // 转为 List 查看(可选)
    List<Integer> asList = Arrays.asList(a);

    for (int i = 0; i < a.length; i++) {
        System.out.println(a[i]);
    }
}Code language: JavaScript (javascript)

输出结果:

1
4
24
56
65
76
78
342

注意:原文代码中遍历从 i = 1 开始,会跳过第一个元素。建议从 i = 0 开始以输出全部元素。

降序排序

Arrays.sort() 默认只能升序。如需降序,可以使用 Collections.reverseOrder()(适用于对象类型数组):

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

Integer[] a = {1, 24, 56, 78, 76, 342, 65, 4};
Arrays.sort(a, Collections.reverseOrder());

for (int i = 0; i < a.length; i++) {
    System.out.println(a[i]);
}Code language: JavaScript (javascript)

输出:

342
78
76
65
56
24
4
1

注意:Collections.reverseOrder() 只能用于对象类型(如 Integer),不能用于基本类型(如 int)。如果使用的是 int[],需先转为 Integer[]。

基本类型数组排序

int[] b = {1, 24, 56, 78, 76, 342, 65, 4};
Arrays.sort(b); // 直接升序排序,b 变为 [1, 4, 24, 56, 65, 76, 78, 342]Code language: JavaScript (javascript)

排序原理简述

Arrays.sort() 对不同类型使用不同算法:

类型排序算法
基本类型(如 int、double)双轴快速排序(Dual-Pivot Quicksort)
对象类型(如 Integer、String)TimSort(归并排序的优化版本)

注意事项

要点说明
原地排序Arrays.sort() 直接修改原数组,不返回新数组
升序优先默认升序,降序需额外处理
null 元素对象数组中包含 null 时排序会抛 NullPointerException
基本类型 vs 对象类型降序排序仅支持对象类型
时间复杂度平均 O(n log n)

提示:排序后配合二分查找 Arrays.binarySearch() 可以快速定位元素位置。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注