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

使用Java函数实现快速排序算法

发布时间:2023-05-19 01:16:04

快速排序是一种常用的排序算法,其基本思想是从待排序序列中选择一个基准元素,通过一趟排序将序列分为两个部分,左边的元素都小于等于基准元素,右边的元素都大于等于基准元素,然后对这两个部分分别进行快速排序,直到整个序列有序。

Java提供了Arrays工具类来实现快速排序。Arrays工具类提供了一个sort方法,这个方法可以对任何实现comparable接口的数组进行排序。在实现comparable接口时,需要重写compareTo方法来实现比较两个元素的大小。

具体实现过程如下:

① 首先在待排序数组中选取一个基准元素,可以选取 个或者最后一个元素作为基准元素;

② 将数组中小于等于基准元素的元素放在左边,大于等于基准元素的元素放在右边;

③ 对左右两个子序列递归地进行快速排序,直到所有的元素都有序。

Java代码实现如下:

public class QuickSort {

    public static void quickSort(int[] arr, int startIndex, int endIndex) {

        //如果区间中只有一个元素或者区间为空,不需要排序

        if (startIndex >= endIndex) {

            return;

        }

        //选取基准元素,这里选取 个元素

        int pivotIndex = getPartitions(arr, startIndex, endIndex);

        //对左右区间递归进行快速排序

        quickSort(arr, startIndex, pivotIndex - 1);

        quickSort(arr, pivotIndex + 1, endIndex);

    }

    /**

     * 划分函数,将数组中小于等于基准元素的元素放在左边,大于等于基准元素的元素放在右边

     * @param arr

     * @param startIndex

     * @param endIndex

     * @return

     */

    private static int getPartitions(int[] arr, int startIndex, int endIndex) {

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

        int pivot = arr[startIndex];

        int leftIndex = startIndex;

        int rightIndex = endIndex;

        //分别从左右两端开始扫描,直到leftIndex >= rightIndex

        while (leftIndex < rightIndex) {

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

            while (leftIndex < rightIndex && arr[rightIndex] >= pivot) {

                rightIndex--;

            }

            //将找到的元素放入左边

            arr[leftIndex] = arr[rightIndex];

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

            while (leftIndex < rightIndex && arr[leftIndex] <= pivot) {

                leftIndex++;

            }

            //将找到的元素放入右边

            arr[rightIndex] = arr[leftIndex];

        }

        //将基准元素放入它最终的位置

        arr[leftIndex] = pivot;

        //返回基准元素的位置

        return leftIndex;

    }

    public static void main(String[] args) {

        int[] arr = {5, 1, 3, 9, 2, 8, 4, 7, 6};

        quickSort(arr, 0, arr.length - 1);

        System.out.println(Arrays.toString(arr));

    }

}

运行结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

快速排序的时间复杂度为O(nlogn),是一种极其高效的排序算法。我们可以利用Java提供的Arrays工具类来实现快速排序,也可以像上面的代码一样使用函数实现快速排序算法。同时,需要注意掌握快速排序算法的思想和原理,以及实现过程。