partition函数
int partition(vector<int >&arr,int l, int r){
int k=rand()%(r-l+1)+l;
swap(arr[l],arr[k]);//随机挑选一个元素
int value=arr[l];//直接以最左边的元素为标志位对于近乎有序的数组就会i退化成o(n^2)
//arr[l+1...j]>arr[l] arr[j+1..i-1]>arr[l]
int j=l;
for(int i=l+1;i<=r;++i){
if(arr[i]<value)
swap(arr[++j],arr[i]);//到这里为止,j就是nums[l+1...j]左闭右闭都是比nums[l]小的数
}
swap(arr[l],arr[j]);
return j;
}
void quickSort(vector<int >&arr,int l, int r){//这里的r是能取得到
if(l>=r) return;
srand(time(NULL));
int p=partition(arr,l,r);
quickSort(arr,l,p-1);
quickSort(arr,p+1,r);
}
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
int n=nums.size();
if(n<=1) return nums;
quickSort(nums,0,n-1);
return nums;
}
};