java 数组排序

admin 15 0

### Java 数组排序详解

在Java中,数组排序是一项基础且常用的操作,它可以帮助我们快速地对数组中的元素进行有序排列,Java提供了多种数组排序的方法,包括使用Arrays类的sort方法、自定义排序算法(如冒泡排序、选择排序、插入排序等)以及利用Java 8引入的Stream API进行排序,我们将详细探讨这些排序方法。

#### 1. 使用Arrays类的sort方法

Java的`java.util.Arrays`类提供了`sort`方法,可以方便地对数组进行排序,这个方法对基本数据类型的数组(如`int[]`、`double[]`等)和对象数组都有效,但需要注意的是,对于对象数组,需要实现`Comparable`接口或提供自定义的`Comparator`。

##### 基本类型数组排序

对于基本类型数组,直接使用`Arrays.sort()`方法即可,对`int[]`数组进行排序:

import java.util.Arrays;

public class ArraySortExample {
    public static void main(String[] args) {
        int[] numbers = {5, 3, 8, 4, 2};
        Arrays.sort(numbers);
        System.out.println(Arrays.toString(numbers)); // 输出:[2, 3, 4, 5, 8]
    }
}

##### 对象数组排序

对于对象数组,如果对象实现了`Comparable`接口,则可以直接使用`Arrays.sort()`方法,有一个`Person`类,包含年龄属性,并实现了`Comparable`接口:

import java.util.Arrays;

class Person implements Comparable<Person> {
    private int age;

    public Person(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(Person other) {
        return Integer.compare(this.age, other.age);
    }

    @Override
    public String toString() {
        return "Person{age=" + age + '}';
    }
}

public class ObjectArraySortExample {
    public static void main(String[] args) {
        Person[] people = {new Person(30), new Person(20), new Person(25)};
        Arrays.sort(people);
        System.out.println(Arrays.toString(people)); // 输出:[Person{age=20}, Person{age=25}, Person{age=30}]
    }
}

如果对象没有实现`Comparable`接口,或者需要按照不同的规则进行排序,可以使用`Arrays.sort()`的另一个版本,该版本接受一个`Comparator`作为参数。

#### 2. 自定义排序算法

虽然`Arrays.sort()`方法非常高效且易于使用,但在某些情况下,了解并实现自定义排序算法也是很有必要的,下面简单介绍几种常见的排序算法。

##### 冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来,遍历数列的工作是重复进行的,直到没有再需要交换的元素为止。

public class BubbleSort {
    public static void sort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 交换arr[j]和arr[j+1]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    // 示例用法
    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        sort(arr);
        System.out.println(Arrays.toString(arr)); // 输出:[11, 12, 22, 25, 34, 64, 90]
    }
}

##### 选择排序

选择排序算法的基本思想是:第1次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的元素中选择出最小(或最大)的元素,然后放到已排序的序列的末尾,以此类推,