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

Java函数如何快速排序一个数组?

发布时间:2023-06-20 01:28:51

快速排序是一种基于比较的排序方法,其核心思想是通过不断的分治和交换,将待排序数组分成两个部分,并将其中一个部分排序完成后再对另一个部分进行排序,最终将整个数组排序完成。快速排序的时间复杂度为O(nlogn)。

在Java中,我们可以使用递归来实现快速排序。具体步骤如下:

1. 选择数组中的一个数值作为枢轴pivot,将数组分成两个部分:左侧的部分所有数值都小于等于pivot,右侧部分所有数值都大于pivot。

2. 将左右两部分分别进行同样的操作,即选择一个pivot,将子数组分为两部分,继续递归直到每个子数组只有一个数值为止。

3. 对于每个子数组,需要进行交换操作,使得左侧部分的数值都小于等于右侧部分的数值。

4. 最终得到排序完成的数组。

以下是Java代码实现:

public class QuickSort {
    
    public void quickSort(int[] arr, int left, int right) {
        if (left < right) {
            // 将数组分为两部分
            int pivotIndex = partition(arr, left, right);
            // 对左侧部分进行排序
            quickSort(arr, left, pivotIndex - 1);
            // 对右侧部分进行排序
            quickSort(arr, pivotIndex + 1, right);
        }
    }
    
    private int partition(int[] arr, int left, int right) {
        // 选择pivot
        int pivot = arr[left];
        int i = left + 1;
        int j = right;
        while (i <= j) {
            // 左侧所有数值都小于等于pivot
            while (i <= j && arr[i] <= pivot) {
                i++;
            }
            // 右侧所有数值都大于pivot
            while (i <= j && arr[j] > pivot) {
                j--;
            }
            // 交换i和j
            if (i < j) {
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
        // 交换pivot和j
        int tmp = arr[left];
        arr[left] = arr[j];
        arr[j] = tmp;
        return j;
    }
}

其中,partition方法用于将数组分为左右两部分,并进行交换操作。quickSort方法用于递归调用partition方法,完成整个数组的排序。

测试代码如下:

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

输出结果为:

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

说明快速排序成功排序了数组。