欢迎访问宙启技术站
智能推送

Java函数:如何使用递归实现快速排序

发布时间:2023-06-21 13:25:13

快速排序是一种经典的排序算法,它的核心思想是分治法。它是一种原地排序算法,不需要额外的空间。

快速排序算法的主要步骤如下:

1. 选定一个元素作为基准值(pivot),一般选择 个元素或者最后一个元素。

2. 将序列中的元素分为左右两个部分,左边的元素都小于等于基准值,右边的元素都大于等于基准值。

3. 递归地对左右两个部分进行排序。

使用递归实现快速排序的函数如下:

public static void quickSort(int[] arr, int left, int right) {
    if (left >= right) {
        return;
    }

    int i = left, j = right, pivot = arr[left];
    while (i < j) {
        while (i < j && arr[j] >= pivot) {
            j--;
        }
        if (i < j) {
            arr[i++] = arr[j];
        }
        while (i < j && arr[i] <= pivot) {
            i++;
        }
        if (i < j) {
            arr[j--] = arr[i];
        }
    }
    arr[i] = pivot;

    quickSort(arr, left, i - 1);
    quickSort(arr, i + 1, right);
}

函数接受三个参数,分别为要排序的数组、要排序的区间左端点、要排序的区间右端点。

函数首先判断左右端点是否相等或者左端点大于右端点,如果是的话就直接返回。

然后选定数组的 个元素作为基准值,进行一趟快排操作,将小于等于基准值的元素移动到数组的左边,大于等于基准值的元素移动到数组的右边。

最后递归地对左右两个部分进行排序。

使用递归实现快速排序的时间复杂度为 O(nlogn),空间复杂度为 O(logn)。因为快排是原地排序算法,所以空间复杂度只与递归栈的深度有关,即 O(logn)。