参考文章:http://blog.csdn.net/morewindows/article/details/6684558
发现地址:https://www.runoob.com/w3cnote/quick-sort.html
要义:数组内任选一个数作为标志key,头尾分别放一个指针(两个指针要向中间靠拢),
①尾指针递减,直到指向数据小于key,将该数据放到key所在位置;
②头指针递增,直到指向数据大于key,将该数据放到上一轮尾指针空出来的位置;
此后依次循环①②,直到头尾指针相遇,将key的值放到这个位置。
此时key前面的数都比key小,key后面的数都比key大,对key来说部分有序;
将key前后的数分别看做两个数组,对这两个数组再进行以上操作,最终达到全部有序。
// Quick Sort
class Solution {
public int[] sortArray(int[] nums) {
quickSort(nums,0,nums.length-1);
return nums;
}
public void quickSort(int[] nums,int l,int r){
if(l<r){
int i = l,j = r,x = nums[l];
while(i<j){
while(i<j && nums[j]>x) j--;
if(i<j){
nums[i++] = nums[j];
}
while(i<j && nums[i]<x) i++;
if(i<j){
nums[j--] = nums[i];
}
}
nums[i] = x;
quickSort(nums,l,i-1);
quickSort(nums,i+1,r);
}
}
}
力扣排序算法测试结果:通过
执行用时:1091 ms, 在所有 Java 提交中击败了8.38%的用户
内存消耗:52.2 MB, 在所有 Java 提交中击败了5.00%的用户