912 quick sort
别忘了基础呀
class Solution {
public int[] sortArray(int[] nums) {
quicksort(nums, 0, nums.length-1);
return nums;
}
private void quicksort(int[] nums, int start, int end) {
if (nums == null || nums.length == 0) {
return;
}
// start是有可能大于end的!!
if (start >= end) {
return;
}
// pivot可以任意选但是它必须放在最后方便partition
int pivot = nums[end];
// right是小于等于pivot的segment的右端点,
// 一开始没有元素大于pivot因此处于start-1位置
// 遍历数组 把小的扔到左边
int right = start - 1;
for (int i = start; i < end; i++) {
if (nums[i] <= pivot) {
swap(nums, i, ++right);
}
}
swap(nums, end, ++right);
// right-1是因为pivot不需要再sort了
quicksort(nums, start, right-1);
quicksort(nums, right+1, end);
}
private void swap(int[] nums, int i1, int i2) {
int tmp = nums[i1];
nums[i1] = nums[i2];
nums[i2] = tmp;
}
}
Last updated