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

Java函数实现快速排序的代码示例

发布时间:2023-06-25 19:01:19

快速排序是一种经典的排序算法,它的思想是选择一个基准值,将数组分成两个部分,左边部分的值都小于基准值,右边部分的值都大于基准值,然后递归地对两个部分进行排序,最终得到一个有序的数组。

Java函数实现快速排序的代码如下所示:

public static void quickSort(int[] arr, int left, int right) {
    if (left < right) {
        // 选取基准值
        int pivot = arr[left];
        int i = left;
        int j = right;
        // 分治
        while (i < j) {
            while (i < j && arr[j] >= pivot) {
                j--;
            }
            if (i < j) {
                arr[i] = arr[j];
                i++;
            }
            while (i < j && arr[i] < pivot) {
                i++;
            }
            if (i < j) {
                arr[j] = arr[i];
                j--;
            }
        }
        arr[i] = pivot;
        // 递归调用
        quickSort(arr, left, i - 1);
        quickSort(arr, i + 1, right);
    }
}

该方法接收一个整型数组、一个左指针和一个右指针作为参数,表示要对数组的某个区间进行排序。

首先判断左指针是否小于右指针,如果不小于,则说明这个区间已经有序,不需要再排序。

接下来选取基准值,这里我们选择最左边的元素作为基准值。然后维护两个指针 i 和 j,初始值分别为 left 和 right。

然后从右往左寻找 个小于基准值的元素,将它移动到左端,即将 arr[j] 赋值给 arr[i],然后 i 加 1,表示 i 所指向的元素已经处理完了。

接着从左往右寻找 个大于等于基准值的元素,将它移动到右端,即将 arr[i] 赋值给 arr[j],然后 j 减 1,表示 j 所指向的元素已经处理完了。

重复上述操作,直到 i 和 j 相遇,将基准值放到它应该在的位置。

接下来递归调用 quickSort 方法对左右部分进行排序。

最终得到一个有序的数组。

快速排序算法的时间复杂度为 O(nlogn),它是一个非常高效的排序算法,被广泛应用于各种场景中。