题目难度:中等
题目描述:
给你一个整数数组 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]
提示:
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
注意:如果数组为已经排序好的,这时快排性能最差,为了尽可能的减少这种最差的情况出现,三数取中
class Solution {
public:
void quicksort(vector<int>& nums,int l,int r){
if(l<r){
int pivot=part(nums,l,r);
quicksort(nums,l,pivot-1);
quicksort(nums,pivot+1,r);
}
}
int part(vector<int>& nums,int l,int r){
int mid = l + ((r-l) >> 1);//三数取中
if (nums[l] > nums[r]) swap(nums[l],nums[r]);
if (nums[mid] > nums[r]) swap(nums[mid],nums[r]);
if (nums[mid] > nums[l]) swap(nums[mid],nums[l]);
int pivot=nums[l];
while(l<r){
while(l<r&&nums[r]>=pivot){
r--;
}
nums[l]=nums[r];
while(l<r&&nums[l]<=pivot){
l++;
}
nums[r]=nums[l];
}
nums[l]=pivot;
return l;
}
vector<int> sortArray(vector<int>& nums) {
int r=nums.size()-1;
quicksort(nums,0,r);
return nums;
}
};