📅  最后修改于: 2023-12-03 15:26:11.791000             🧑  作者: Mango
快速排序是一种常用的排序算法。它的主要思想是通过分治的策略来对一个数组进行排序,时间复杂度为 $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;
}
上面的代码实现了快速排序中的两个核心函数:partition
和 quickSort
。其中,partition
函数用来对输入数组进行划分,它将数组中小于基准元素的元素移动到数组的左侧,大于等于基准元素的元素移动到数组的右侧,并返回基准元素最终所在的位置。quickSort
函数则使用递归的方式对划分后的两个子数组进行排序。
注意,在这里我们采用的是一个列表(List
)类型的输入数组,而不是传统的数组类型。这是因为 List
类型的数组容器支持动态修改操作(如 add
和 remove
等),更加实用,因此在实际开发中更常用。
我们来使用一个示例来演示一下快速排序的具体实现过程。假设输入数组为 [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
类型的输入数组,以便更好地支持动态修改操作。