leetcode 912. 排序数组-快速排序(指针)
给你一个整数数组 nums,请你将该数组升序排列。
示例 1:
输入: nums = [5,2,3,1]
输出: [1,2,3,5]
示例 2:
输入: nums = [5,1,1,2,0,0]
输出: [0,0,1,1,2,5]
思路: 快速排序 单边递归(递归性能差,这样既可以更好的理解程序,也能解决一部分性能问题)
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortArray = function(nums) {
return quickSort(nums,0,nums.length-1);
};
// 快速排序
function quickSort(arr,l,r){
if(l>=r)return arr;
while(l<r){
let x=l,y=r,base=getMid(arr[l],arr[Math.floor((l+r)/2)],arr[r]);
do{
while(arr[x]<base)x++;
while(arr[y]>base)y--;
if(x<=y){
[arr[x],arr[y]]=[arr[y],arr[x]];
x++;
y--;
}
}while(x<=y);
quickSort(arr,x,r);
r=y
}
return arr
}
function getMid(l,mid,r){
if(l>r)[l,r]=[r,l];
if(l>mid)[l,mid]=[mid,l];
if(mid>r)[r,mid]=[mid,r];
return mid
}