2025年- H100-Lc208--912.排序数组(快速选择排序)--Java版

1.题目

2.思路

快速选择排序的平均时间复杂度是O(nlogn),最坏时间复杂度是O(n^2),最好的时间复杂度是O(nlogn),空间复杂度是O(nlogn)。

排序算法中不稳定的算法是:快希选堆(牺牲稳定性,快速的选择都是不稳定的)。

例子:



3.代码实现

java 复制代码
class Solution {
    public int[] sortArray(int[] nums) {
        if (nums == null || nums.length == 0) {
            return nums;
        }
        QuickSort(nums, 0, nums.length - 1);
        return nums;
    }

    public void QuickSort(int[] nums, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(nums, low, high);
            QuickSort(nums, low, pivotIndex - 1);
            QuickSort(nums, pivotIndex + 1, high);
        }
    }

    public int partition(int[] nums, int low, int high) {
        // 随机选择一个 pivot,交换到 high 位置
        int rand = low + (int)(Math.random() * (high - low + 1));
        swap(nums, rand, high);

        int pivot = nums[high];
        int i = low - 1;

        // 遍历 [low, high-1]
        for (int j = low; j < high; j++) {
            if (nums[j] <= pivot) {
                i++;
                swap(nums, i, j);
            }
        }

        swap(nums, i + 1, high);
        return i + 1; // 返回基准值的位置
    }

    public void swap(int[] nums, int i, int j) {
        if(i!=j)
        {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
        }
    }
}