Java 快速排序算法实现教程

介绍

欢迎来到本教程!在本教程中,我将向你展示如何使用Java编程语言实现快速排序算法。快速排序是一种高效的排序算法,它通过将数组分为较小和较大的两个子数组来递归地排序数组。我们将按照以下步骤进行实现:首先,我们将介绍快速排序算法的步骤和原理,并使用表格和流程图进行说明。然后,我们将逐步解释每个步骤的代码实现,并提供相应的注释。

快速排序算法步骤

下表是快速排序算法的步骤和相应的代码实现。

步骤 描述 代码示例
1 选择一个基准元素作为枢轴,将数组分为两个子数组 int pivot = arr[high];
2 根据枢轴值,将小于枢轴的元素放到左边,大于枢轴的元素放到右边 int i = (low - 1);
3 递归地对左右两个子数组进行排序 quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high);

快速排序算法实现

步骤1:选择基准元素

我们首先需要选择一个基准元素,来作为枢轴。在快速排序算法中,通常选择数组的最后一个元素作为枢轴。下面是代码示例:

int pivot = arr[high];

上述代码中,arr是待排序的数组,high是数组的最后一个元素的索引。

步骤2:分区

我们需要将数组分为两个子数组,使得左边的子数组元素都小于枢轴,右边的子数组元素都大于枢轴。为了实现这个目标,我们定义两个指针ij,并初始化ilow-1。接下来,我们使用一个循环来比较数组元素,并根据条件交换元素的位置。下面是代码示例:

int i = (low - 1);
for (int j = low; j < high; j++) {
    if (arr[j] < pivot) {
        i++;
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

上述代码中,low是数组的第一个元素的索引,high是数组的最后一个元素的索引。在循环中,我们比较arr[j]和枢轴的大小,如果arr[j]小于枢轴,则将arr[j]arr[i]交换位置。

步骤3:递归排序子数组

最后一步是递归地对左右两个子数组进行排序。我们将对两个子数组分别调用快速排序函数。下面是代码示例:

quickSort(arr, low, i);
quickSort(arr, i + 2, high);

上述代码中,quickSort是快速排序的递归函数,lowhigh分别是子数组的起始和结束索引。

完整代码示例

下面是完整的Java代码示例,实现了快速排序算法:


public class QuickSort {

    public static void main(String[] args) {
        int[] arr = {10, 7, 8, 9, 1, 5};
        int n = arr.length;

        quickSort(arr, 0, n - 1);

        System.out.println("排序后的数组:");
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }

    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high);

            quickSort(arr, low, pi - 1);
            quickSort(arr, pi + 1, high);
        }
    }

    public static int partition(int[] arr, int low, int high) {
        int pivot