欢迎访问宙启技术站
智能推送

Java中如何实现对数组的排序操作

发布时间:2023-06-25 09:32:32

在Java中,对数组进行排序是非常常见的操作,Java提供了多种方式对数组进行排序。本文将介绍常用的几种排序方法。

1. Arrays.sort()

Arrays.sort()是Java内置的一个方法,可以对数组进行排序。Arrays.sort()方法有两种形式,一种是对基本数据类型数组排序,另一种是对对象数组排序。

对基本数据类型数组排序

int[] arr = {3, 1, 4, 2, 5};

Arrays.sort(arr);

System.out.println(Arrays.toString(arr));    //输出:[1, 2, 3, 4, 5]

对对象数组排序

Person[] persons = new Person[3];

persons[0] = new Person("Tom", 24);

persons[1] = new Person("Jack", 20);

persons[2] = new Person("Lucy", 22);

Arrays.sort(persons, new Comparator<Person>() {

    @Override

    public int compare(Person o1, Person o2) {

        return o1.getAge() - o2.getAge();    //按年龄从小到大排序

    }

});

System.out.println(Arrays.toString(persons));    //输出:[Person{name='Jack', age=20}, Person{name='Lucy', age=22}, Person{name='Tom', age=24}]

注意:如果要对自定义对象的数组进行排序,需要实现Comparator接口,重写compare方法。

2. 冒泡排序

冒泡排序是一种简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素的大小,如果顺序错误就交换这两个元素,重复这一过程直到没有相邻元素需要交换。

int[] arr = {3, 1, 4, 2, 5};

for (int i = 0; i < arr.length; i++) {

    for (int j = 0; j < arr.length - i - 1; 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));    //输出:[1, 2, 3, 4, 5]

3. 快速排序

快速排序是一种高效的排序算法,它采用的是分治法的思想。具体实现方法是先从数组中选出一个数作为基准数,将数组中小于基准数的数放到左边,大于基准数的数放到右边,然后递归地调用该方法,直到数组有序。

int[] arr = {3, 1, 4, 2, 5};

quickSort(arr, 0, arr.length - 1);

public static void quickSort(int[] arr, int left, int right) {

    if (left < right) {

        int i = left;

        int j = right;

        int pivot = arr[left];    //选取左侧 个数为基准数

        while (i < j) {

            while (i < j && arr[j] >= pivot) {

                j--;

            }

            if (i < j) {

                arr[i++] = arr[j];

            }

            while (i < j && arr[i] < pivot) {

                i++;

            }

            if (i < j) {

                arr[j--] = arr[i];

            }

        }

        arr[i] = pivot;

        quickSort(arr, left, i - 1);

        quickSort(arr, i + 1, right);

    }

}

System.out.println(Arrays.toString(arr));    //输出:[1, 2, 3, 4, 5]

4. 归并排序

归并排序也是一种常用的排序算法,它采用的是分治法的思想。将数组分成左右两个部分,对左右两个部分分别排序,然后将两个有序数组合并成一个有序数组。

int[] arr = {3, 1, 4, 2, 5};

mergeSort(arr, 0, arr.length - 1, new int[arr.length]);

public static void mergeSort(int[] arr, int left, int right, int[] temp) {

    if (left < right) {

        int mid = (left + right) / 2;

        mergeSort(arr, left, mid, temp);

        mergeSort(arr, mid + 1, right, temp);

        merge(arr, left, mid, right, temp);

    }

}

public static void merge(int[] arr, int left, int mid, int right, int[] temp) {

    int i = left;

    int j = mid + 1;

    int k = 0;

    while (i <= mid && j <= right) {

        if (arr[i] < arr[j]) {

            temp[k++] = arr[i++];

        } else {

            temp[k++] = arr[j++];

        }

    }

    while (i <= mid) {

        temp[k++] = arr[i++];

    }

    while (j <= right) {

        temp[k++] = arr[j++];

    }

    for (int m = 0; m < k; m++) {

        arr[left + m] = temp[m];

    }

}

System.out.println(Arrays.toString(arr));    //输出:[1, 2, 3, 4, 5]

总结:Java提供了很多种对数组进行排序的方法,每种方法都有自己的优缺点,可以根据实际需要选择。虽然Java内置的Arrays.sort()方法最为简单便捷,但对于冒泡排序、快速排序、归并排序等算法的理解和掌握可以在算法思想上有所提升。