怎样实现快速排序算法

例题:假设有一个整数数组nums,请问如何对它进行快速排序?

分析:快速排序是一种常用的排序算法,它利用了分治的思想,将一个大问题分解成若干个小问题,通过递归的方式解决。具体实现时,我们可以选择一个基准值pivot,将数组划分成两个部分,一部分小于等于pivot,一部分大于pivot,然后对两个部分分别进行递归排序。

Java代码实现:

public static void quickSort(int[] nums) {
    if (nums == null || nums.length <= 1) {
        return;
    }
    quickSortHelper(nums, 0, nums.length - 1);
}

private static void quickSortHelper(int[] nums, int left, int right) {
    if (left >= right) {
        return;
    }
    int pivotIndex = partition(nums, left, right);
    quickSortHelper(nums, left, pivotIndex - 1);
    quickSortHelper(nums, pivotIndex + 1, right);
}

private static int partition(int[] nums, int left, int right) {
    int pivot = nums[right];
    int i = left;
    for (int j = left; j < right; j++) {
        if (nums[j] <= pivot) {
            swap(nums, i, j);
            i++;
        }
    }
    swap(nums, i, right);
    return i;
}

private static void swap(int[] nums, int i, int j) {
    int temp = nums[i];
    nums[i] = nums[j];
    nums[j] = temp;
}

代码分析:

  • 选择一个基准值pivot,将数组划分成两个部分,一部分小于等于pivot,一部分大于pivot。
  • 对两个部分分别进行递归排序。