Java对象排序

排序是计算机科学中的一个基本问题,它是将一组数据按照特定规则进行重新排列的过程。在Java中,对象排序是指对一个包含多个对象的集合进行排序操作。排序可以按照对象的某个属性进行,也可以按照对象的多个属性进行。

排序算法

Java标准库中提供了多种排序算法,常用的有冒泡排序、选择排序、插入排序、归并排序和快速排序等。这些排序算法都可以用于对象排序。

冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,并按照大小交换它们的位置,直到整个列表排序完成。

public static <T extends Comparable<? super T>> void bubbleSort(T[] array) {
    int n = array.length;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (array[j].compareTo(array[j + 1]) > 0) {
                T temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
}

选择排序

选择排序是一种简单的排序算法,它每次遍历列表找到最小元素,并将其与当前位置的元素交换位置,直到整个列表排序完成。

public static <T extends Comparable<? super T>> void selectionSort(T[] array) {
    int n = array.length;
    for (int i = 0; i < n - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < n; j++) {
            if (array[j].compareTo(array[minIndex]) < 0) {
                minIndex = j;
            }
        }
        T temp = array[minIndex];
        array[minIndex] = array[i];
        array[i] = temp;
    }
}

插入排序

插入排序是一种简单的排序算法,它逐个将元素插入到已排序序列中的正确位置,直到整个列表排序完成。

public static <T extends Comparable<? super T>> void insertionSort(T[] array) {
    int n = array.length;
    for (int i = 1; i < n; i++) {
        T key = array[i];
        int j = i - 1;
        while (j >= 0 && array[j].compareTo(key) > 0) {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = key;
    }
}

归并排序

归并排序是一种分治的排序算法,它将一个列表递归地分成两个子列表,然后将两个子列表合并成一个有序列表,直到整个列表排序完成。

public static <T extends Comparable<? super T>> void mergeSort(T[] array) {
    if (array.length > 1) {
        int mid = array.length / 2;
        T[] leftArray = Arrays.copyOfRange(array, 0, mid);
        T[] rightArray = Arrays.copyOfRange(array, mid, array.length);
        mergeSort(leftArray);
        mergeSort(rightArray);
        merge(array, leftArray, rightArray);
    }
}

private static <T extends Comparable<? super T>> void merge(T[] array, T[] leftArray, T[] rightArray) {
    int i = 0, j = 0, k = 0;
    while (i < leftArray.length && j < rightArray.length) {
        if (leftArray[i].compareTo(rightArray[j]) <= 0) {
            array[k++] = leftArray[i++];
        } else {
            array[k++] = rightArray[j++];
        }
    }
    while (i < leftArray.length) {
        array[k++] = leftArray[i++];
    }
    while (j < rightArray.length) {
        array[k++] = rightArray[j++];
    }
}

快速排序

快速排序是一种分治的排序算法,它选择一个基准元素,并将列表分成小于基准元素和大于基准元素的两个子列表,然后递归地对两个子列表进行排序,直到整个列表排序完成。

public static <T extends Comparable<? super T>> void quickSort(T[] array) {
    quickSort(array, 0, array.length - 1);
}

private