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

Java函数实现快速排序的思路和具体实现方式。

发布时间:2023-05-31 18:30:33

快速排序是一种常见的排序算法,在对大量的数据进行排序时速度非常快,它的时间复杂度为 O(nlogn)。快速排序是基于分治的思想,其基本思路为:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字都比另一部分记录的关键字小,然后递归地对这两部分记录继续进行排序,直到整个序列有序为止。

快速排序的核心是选取一个基准数进行划分,然后分别对基准数左右两边的数进行递归排序,最终完成整个序列的排序。在选取基准数时,有多种选择方法,最常见的是选择待排序序列的 个元素或者最后一个元素作为基准数,同时也有随机选择基准数的方法。

快速排序的具体实现方式如下:

1.选取基准数

在实现快速排序时,需要在待排序序列中选取一个基准数。一般情况下,可以选择 个元素或最后一个元素作为基准数。当然也可以利用随机数的种子来选择基准数。

2.分割数列

将所有小于基准数的数放在左侧,大于基准数的数放在右侧,相等的数可以放到任一侧。

3.算法递归

递归地对左侧和右侧数列排序,直到排序完成。

Java代码如下:

public class QuickSort {

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

        if (left < right) {

            int partitionIndex = partition(arr, left, right);

            quickSort(arr, left, partitionIndex - 1);

            quickSort(arr, partitionIndex + 1, right);

        }

    }

    private int partition(int[] arr, int left, int right) {

        int pivot = left;

        int index = pivot + 1;

        for (int i = index; i <= right; i++) {

            if (arr[i] < arr[pivot]) {

                swap(arr, i, index);

                index++;

            }

        }

        swap(arr, pivot, index - 1);

        return index - 1;

    }

    private void swap(int[] arr, int i, int j) {

        int temp = arr[i];

        arr[i] = arr[j];

        arr[j] = temp;

    }

}

在上面的代码中,quickSort方法表示开始排序函数,其中left是数组的起始位置,right是数组的结束位置。这个方法首先递归的调用partition方法,返回的partitionIndex是基准点的位置,然后分别在左侧和右侧数组进行递归排序,直到排序完成。

partition方法实现了数组的划分,首先选择了 个元素为基准点,然后在数组中按照基准点进行划分。

在循环中,如果当前的元素小于基准点,将其与下一个元素进行交换,并将index加1. 在循环完成后,将基准点和index-1进行交换。最后返回index-1。

swap方法是用来交换数组中两个元素的位置。

快速排序是一种非常有效的排序算法,其时间复杂度为 O(nlogn),是一种高效的排序算法。实现起来也相对简单,可以通过递归的方式,对数组不断进行划分。