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

Java函数实现快速排序的步骤

发布时间:2023-05-30 20:21:51

快速排序是一种非常高效的排序算法,其时间复杂度为 O(NlogN),且空间复杂度为 O(1),相对于其他排序算法而言,其实现也比较简单易懂。下面我们就来具体了解一下Java函数实现快速排序的步骤。

1. 算法思路

快速排序采用分治策略,具体步骤如下:

选定一个基准元素,将数组中小于它的元素放在其左边,大于它的元素放在右边;

递归地对其左右两个子序列进行同样的操作,直到排序完成。

因此,快速排序的关键在于选定基准元素的过程,通常采用数组中的 个元素作为基准元素。

2. 实现步骤

1)定义排序函数 quickSort(int [] arr, int left, int right),其中 arr 表示待排序的数组,left 和 right 分别表示左右两端的下标。

2)通过递归方式对左右两个子序列进行排序,直到序列长度为 1。

3)对于当前序列,选定 个元素作为基准元素 pivot,将数组中小于 pivot 的元素放在其左边,大于它的元素放在右边。

4)递归对左右两个子序列分别进行同样的操作。

5)返回排好序的数组。

代码如下:

public static void quickSort(int[] arr, int left, int right) {

    int i, j, pivot;

    if (left > right) {

        return;

    }

    // 选定 个元素作为基准元素

    pivot = arr[left];

    i = left;

    j = right;

    while (i != j) {

        // 从右往左找到 个小于基准元素的元素

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

            j--;

        }

        // 从左往右找到 个大于基准元素的元素

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

            i++;

        }

        // 交换两个元素的位置

        if (i < j) {

            int temp = arr[i];

            arr[i] = arr[j];

            arr[j] = temp;

        }

    }

    // 将基准元素放在最终位置

    arr[left] = arr[i];

    arr[i] = pivot;

    // 递归对左右两个子序列进行同样的操作

    quickSort(arr, left, i - 1);

    quickSort(arr, i + 1, right);

}

3. 效率分析

快速排序的时间复杂度为 O(NlogN),其中 N 表示排序数组的长度。但是快速排序的效率和选取的基准元素有关,如果选取的基准元素恰好是数组中的中位数,那么快速排序的效率将得到发扬光大,因此在实际应用快速排序时,通常需要考虑选取基准元素的方法。此外,快速排序也存在某些情况下的最坏情况,比如待排序数组已经有序,此时快速排序将变为冒泡排序,时间复杂度将达到 O(N^2),因此在实际应用时,需要对快速排序进行优化。