Java List 快速排序实现

简介

在这篇文章中,我将向你介绍如何使用Java实现快速排序算法来对List进行排序。快速排序是一种常用且高效的排序算法,它基于分治的思想,能够在平均情况下以O(n log n)的时间复杂度完成排序。

快速排序流程

下面是快速排序的整体流程,我们将使用递归的方式来实现。

步骤 内容
1 选择一个基准元素(pivot)
2 将数组分为两部分,使得左边的元素都小于等于基准元素,右边的元素都大于等于基准元素
3 递归地对左右两部分进行快速排序
4 合并左右两部分,得到最终的排序结果

下面我们将一步步来实现这个算法。

代码实现步骤

步骤1:选择基准元素

首先,我们需要选择一个基准元素。在这里,我们选择列表中间位置的元素作为基准元素。你可以通过以下代码来实现:

int pivot = list.get(list.size() / 2);

这里,我们使用get方法获取列表中间位置的元素,并将其赋值给pivot变量。

步骤2:分割列表

接下来,我们需要将列表分为两部分,使得左边的元素都小于等于基准元素,右边的元素都大于等于基准元素。我们可以使用两个指针(leftright)来遍历列表,并将元素与基准元素进行比较。

int left = 0;
int right = list.size() - 1;

while (left <= right) {
    // 从左往右找到第一个大于等于基准元素的位置
    while (list.get(left) < pivot) {
        left++;
    }
    
    // 从右往左找到第一个小于等于基准元素的位置
    while (list.get(right) > pivot) {
        right--;
    }
    
    // 如果left <= right,则交换两个元素的位置
    if (left <= right) {
        int temp = list.get(left);
        list.set(left, list.get(right));
        list.set(right, temp);
        
        left++;
        right--;
    }
}

上面的代码中,我们使用while循环找到第一个大于等于基准元素的位置和第一个小于等于基准元素的位置。然后,我们交换这两个位置上的元素。最后,更新leftright的值。

步骤3:递归排序

接下来,我们需要递归地对左右两部分进行排序。我们可以定义一个递归函数来实现:

void quickSort(List<Integer> list, int start, int end) {
    if (start < end) {
        int pivotIndex = partition(list, start, end); // 将列表分割,并返回基准元素的位置
        quickSort(list, start, pivotIndex - 1); // 对左边部分进行排序
        quickSort(list, pivotIndex + 1, end); // 对右边部分进行排序
    }
}

在上述代码中,partition方法用于将列表分割,并返回基准元素的位置。然后,我们递归地对左右两部分进行排序。

步骤4:合并结果

最后,我们需要将左右两部分排序结果合并起来,得到最终的排序结果。代码如下所示:

List<Integer> quickSort(List<Integer> list) {
    quickSort(list, 0, list.size() - 1);
    return list;
}

我们定义了一个外部的quickSort方法,它接受一个列表作为参数,并在内部调用递归的quickSort方法。最终,返回排序后的列表。

完整代码

下面是完整的代码实现:

import java.util.List;

public class QuickSort {
    public List<Integer> quickSort(List<Integer> list) {