2025年- H100-Lc208--912.排序数组(快速选择排序)--Java版
1.题目
2.思路
快速选择排序的平均时间复杂度是O(nlogn),最坏时间复杂度是O(n^2),最好的时间复杂度是O(nlogn),空间复杂度是O(nlogn)。
排序算法中不稳定的算法是:快希选堆(牺牲稳定性,快速的选择都是不稳定的)。
例子:
3.代码实现
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;}}
}