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

如何在Java中使用递归实现快速排序函数?

发布时间:2023-06-22 12:32:49

快速排序(Quick Sort)是一种高效的排序算法,它通过分治的思想将一个大问题分解为若干个小问题,并且每个小问题都有自己的解决方案,然后将这些解决方案合并起来,得到整体的解决方案。快速排序算法的基本思路是,在数组中选择一个基准值,然后把大于这个基准值的元素放置到右边,小于等于这个基准值的元素放置到左边,然后递归地对左右两个子数组进行排序。

在Java中使用递归实现快速排序的代码如下:

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {5, 9, 1, 4, 2, 8, 3, 7, 6};
        quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }

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

        int i = left;
        int j = right;
        int pivot = arr[left];

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

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

        arr[i] = pivot;
        quickSort(arr, left, i - 1);
        quickSort(arr, i + 1, right);
    }
}

这个快速排序函数接收一个整型数组、一个左指针和一个右指针作为参数。左指针和右指针分别指向需要排序的子数组的 个和最后一个元素。递归结束的条件是左指针大于等于右指针,此时表示子数组已经排序完成。

在函数内部,先定义了三个指针:i、j和pivot。其中,i和j分别指向子数组的左右两端,同时pivot为选定的基准值,初始化为子数组的 个元素。

然后,在while循环中,我们先从右向左遍历整个子数组,找到 个小于pivot的元素,并将其放置到左侧的位置。然后从左向右遍历整个子数组,找到 个大于等于pivot的元素,并将其放置到右侧的位置。重复这个过程,直到i指针和j指针相遇为止。此时将pivot放置在数组中间位置,然后递归地对左侧和右侧的子数组进行排序。

快速排序的时间复杂度为$O(nlogn)$,空间复杂度为$O(1)$,是一种性能优异的排序算法。