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;
}
}
}