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

Java函数实现快速排序的实现方式

发布时间:2023-07-01 04:29:45

快速排序是一种高效的排序算法,基于分治的思想。它的基本思想是选择一个基准元素,通过一趟排序将序列分成两部分,使得左边的元素都小于基准元素,右边的元素都大于基准元素,然后再对这两部分分别进行递归排序,直到整个序列有序。

下面是Java语言实现快速排序的代码:

public class QuickSort {
    public static 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 static int partition(int[] arr, int left, int right) {
        int pivot = left; // 设定基准值(pivot)
        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 static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

这段代码中,quickSort方法是快速排序的入口方法,它接受一个整型数组以及数组的左右边界作为参数。它首先判断左边界是否小于右边界,如果是,则进行分区操作,将数组分为两部分,并分别对两部分进行递归排序。

分区操作是快速排序的核心步骤,它选择一个基准元素(这里选择最左边的元素),然后定义一个index指针,从基准元素的下一个位置开始,遍历到右边界。如果当前元素小于基准元素,就将该元素与index指针所指的元素进行交换,并将index指针向右移动一位。遍历结束后,将基准元素与index指针所指的前一个元素进行交换,使得基准元素位于它应该在的位置。最后返回基准元素的索引。

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

通过以上代码实现,我们可以用以下方法来调用:

public static void main(String[] args) {
    int[] arr = {10, 7, 8, 9, 1, 5};
    int n = arr.length;
    QuickSort.quickSort(arr, 0, n-1);
    System.out.println("排序后的数组:");
    for (int num : arr) {
        System.out.print(num + " ");
    }
}

输出结果为:1 5 7 8 9 10,说明数组已经按照从小到大的顺序排列好了。

快速排序的时间复杂度为O(nlogn),在平均情况下是最快的排序算法之一。它的实现方式相对简单,但是需要理解递归和分治的思想。