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

使用Java函数对列表进行排序的方法

发布时间:2023-07-05 23:53:36

在Java中,可以使用不同的方法对列表进行排序。下面是一些常见的排序方法。

1. 冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法,它重复地交换相邻元素,直到整个列表排序完成。它的时间复杂度为O(n^2)。

public static void bubbleSort(List<Integer> list) {
    int n = list.size();
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (list.get(j) > list.get(j+1)) {
                // 交换相邻元素
                int temp = list.get(j);
                list.set(j, list.get(j+1));
                list.set(j+1, temp);
            }
        }
    }
}

2. 快速排序(Quick Sort)

快速排序是一种常用的排序算法,它通过选择一个基准元素,并将列表分割成两个子列表,其中一个子列表的所有元素都小于基准元素,另一个子列表的所有元素都大于基准元素。然后递归地对两个子列表进行排序,直到整个列表排序完成。快速排序的时间复杂度为O(nlogn)。

public static void quickSort(List<Integer> list, int low, int high) {
    if (low < high) {
        int pi = partition(list, low, high);
        quickSort(list, low, pi-1);
        quickSort(list, pi+1, high);
    }
}

public static int partition(List<Integer> list, int low, int high) {
    int pivot = list.get(high);
    int i = low-1;
    for (int j = low; j < high; j++) {
        if (list.get(j) < pivot) {
            i++;
            // 交换元素
            int temp = list.get(i);
            list.set(i, list.get(j));
            list.set(j, temp);
        }
    }
    // 交换基准元素
    int temp = list.get(i+1);
    list.set(i+1, list.get(high));
    list.set(high, temp);
    return i+1;
}

3. 归并排序(Merge Sort)

归并排序是一种分治排序算法,它将列表分成两个子列表,然后对这两个子列表分别进行排序,最后将两个有序的子列表合并成一个有序列表。归并排序的时间复杂度为O(nlogn)。

public static void mergeSort(List<Integer> list) {
    if (list.size() > 1) {
        int mid = list.size() / 2;
        List<Integer> left = new ArrayList<>(list.subList(0, mid));
        List<Integer> right = new ArrayList<>(list.subList(mid, list.size()));
        mergeSort(left);
        mergeSort(right);
        merge(list, left, right);
    }
}

public static void merge(List<Integer> list, List<Integer> left, List<Integer> right) {
    int i = 0;
    int j = 0;
    int k = 0;
    while (i < left.size() && j < right.size()) {
        if (left.get(i) < right.get(j)) {
            list.set(k, left.get(i));
            i++;
        } else {
            list.set(k, right.get(j));
            j++;
        }
        k++;
    }

    while (i < left.size()) {
        list.set(k, left.get(i));
        i++;
        k++;
    }

    while (j < right.size()) {
        list.set(k, right.get(j));
        j++;
        k++;
    }
}

4. 插入排序(Insertion Sort)

插入排序是一种简单的排序算法,它通过构建有序序列,将未排序的元素逐个插入到有序序列中的适当位置。插入排序的时间复杂度为O(n^2)。

public static void insertionSort(List<Integer> list) {
    int n = list.size();
    for (int i = 1; i < n; i++) {
        int key = list.get(i);
        int j = i - 1;
        while (j >= 0 && list.get(j) > key) {
            list.set(j + 1, list.get(j));
            j = j - 1;
        }
        list.set(j + 1, key);
    }
}

以上是四种常见的排序方法,根据具体需求选择适合的算法进行列表排序。