📜  数组列表的快速排序 - Java (1)

📅  最后修改于: 2023-12-03 15:26:11.791000             🧑  作者: Mango

数组列表的快速排序 - Java

快速排序是一种常用的排序算法。它的主要思想是通过分治的策略来对一个数组进行排序,时间复杂度为 $O(nlogn)$。下面我们来介绍一下如何使用 Java 实现数组列表的快速排序。

算法实现

快速排序的实现方式有很多种,其中最常用的方式是使用递归。具体实现方式如下:

public static void quickSort(List<Integer> list, int left, int right) {
    if (left < right) {
        int partitionIndex = partition(list, left, right);
        quickSort(list, left, partitionIndex - 1);
        quickSort(list, partitionIndex + 1, right);
    }
}

public static int partition(List<Integer> list, int left, int right) {
    int pivot = list.get(right);
    int partitionIndex = left;
    for (int i = left; i < right; i++) {
        if (list.get(i) < pivot) {
            Collections.swap(list, i, partitionIndex);
            partitionIndex++;
        }
    }
    Collections.swap(list, partitionIndex, right);
    return partitionIndex;
}

上面的代码实现了快速排序中的两个核心函数:partitionquickSort。其中,partition 函数用来对输入数组进行划分,它将数组中小于基准元素的元素移动到数组的左侧,大于等于基准元素的元素移动到数组的右侧,并返回基准元素最终所在的位置。quickSort 函数则使用递归的方式对划分后的两个子数组进行排序。

注意,在这里我们采用的是一个列表(List)类型的输入数组,而不是传统的数组类型。这是因为 List 类型的数组容器支持动态修改操作(如 addremove 等),更加实用,因此在实际开发中更常用。

示例演示

我们来使用一个示例来演示一下快速排序的具体实现过程。假设输入数组为 [3, 9, 7, 1, 8, 4, 6, 2, 5],我们要将其进行从小到大的排序。

下面是每一步的具体实现过程:

  • 初始状态:[3, 9, 7, 1, 8, 4, 6, 2, 5]

  • 第一次划分(基准元素为 5):[3, 2, 4, 1, 5, 9, 6, 7, 8]

  • 第二次划分(基准元素为 4):[3, 2, 1, 4, 5, 6, 7, 8, 9]

  • 第三次划分(基准元素为 7):[3, 2, 1, 4, 5, 6, 7, 8, 9]

  • 第四次划分(基准元素为 1):[1, 2, 3, 4, 5, 6, 7, 8, 9]

最终,我们得到了从小到大排序的结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]

总结

快速排序是一种常用的排序算法,可以高效地对一个数组进行排序。在 Java 中,我们可以使用递归的方式来实现快速排序,具体实现方式较为简单。在实际开发中,我们通常会使用 List 类型的输入数组,以便更好地支持动态修改操作。