排序算法
快排流程
采用分治的思想,对于一组数据,选择一个基准元素(哨兵),通常选择第一个或最后一个元素,通过第一轮扫描,比base小的元素都在base左边,比base大的元素都在base右边,再有同样的方法递归排序这两部分,直到序列中所有数据均有序为止。
如,选取下标为0的元素作为哨兵,r=num.size()-1, 首先移动r找到比哨兵小的元素,将r当前指向的元素放到l所在位置。
然后移动l找到大于等于哨兵的位置,替换r所在的位置。
依次交替,知道l与r相遇,将相遇位置赋予哨兵的值。
然后左右两侧递归。
java
class Solution {
public int[] sortArray(int[] nums) {
quickSort(nums, 0, nums.length-1);
return nums;
}
void quickSort(int[] nums, int l, int r){
if(l>=r){
return;
}
int base = nums[l];
int ll=l, rr=r;
while(l<r){
while(l<r&&nums[r]>=base){
r--;
}
nums[l] = nums[r];
while(l<r&&nums[l]<base){
l++;
}
nums[r] = nums[l];
}
nums[l] = base;
quickSort(nums, ll, l-1);
quickSort(nums, l+1, rr);
}
}