快速排序法 Java 实现

介绍

快速排序(Quick Sort)是一种常用的排序算法,它的基本思想是通过分治法将一个大问题分解为多个小问题,并逐步解决这些小问题。快速排序的平均时间复杂度为O(nlogn),是一种高效的排序算法。

在本文中,我将介绍如何使用Java实现快速排序算法,并为你提供一步步的代码实现。

快速排序的流程

下面是快速排序算法的基本流程:

  1. 选择一个基准元素,将数组分成两个子数组;
  2. 将小于基准元素的元素放置在基准元素的左边,将大于基准元素的元素放置在基准元素的右边;
  3. 递归地对左右子数组进行快速排序。

下面是一个流程表格,展示了快速排序的每一步骤:

步骤 操作
1 选择一个基准元素
2 将数组分成两个子数组
3 对左子数组递归执行快速排序
4 对右子数组递归执行快速排序

代码实现

步骤1:选择一个基准元素

在快速排序中,我们需要选择一个基准元素(pivot)。通常,我们选择数组的第一个元素作为基准元素。你可以使用以下代码选择基准元素:

int pivot = arr[low];

步骤2:将数组分成两个子数组

接下来,我们需要将数组分成两个子数组,一个子数组包含小于基准元素的元素,另一个子数组包含大于基准元素的元素。下面是代码实现:

// 初始化左右指针
int i = low + 1;
int j = high;

while (i <= j) {
    // 从左往右找到第一个大于基准元素的元素
    while (i <= j && arr[i] <= pivot) {
        i++;
    }

    // 从右往左找到第一个小于基准元素的元素
    while (i <= j && arr[j] > pivot) {
        j--;
    }

    // 交换找到的两个元素
    if (i < j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

// 将基准元素放置在正确的位置
arr[low] = arr[j];
arr[j] = pivot;

步骤3:递归地对左子数组进行快速排序

现在,我们需要对左子数组进行递归排序。你可以使用以下代码实现:

quickSort(arr, low, j - 1);

步骤4:递归地对右子数组进行快速排序

最后,我们需要对右子数组进行递归排序。你可以使用以下代码实现:

quickSort(arr, j + 1, high);

完整代码示例

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

public class QuickSort {
    public void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            // 选择基准元素
            int pivot = arr[low];

            // 将数组分成两个子数组
            int i = low + 1;
            int j = high;

            while (i <= j) {
                while (i <= j && arr[i] <= pivot) {
                    i++;
                }

                while (i <= j && arr[j] > pivot) {
                    j--;
                }

                if (i < j) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }

            arr[low] = arr[j];
            arr[j] = pivot;

            // 对左子数组递归执行快速排序
            quickSort(arr, low, j - 1);

            // 对右子数组递归执行快速排序
            quickSort(arr, j + 1, high);
        }
    }
}

总结