快速排序
void quicksort(vector<int> &nums, int l, int r)
{
if(l>=r){return;}
int i=l;
int j=r;
int partition=nums[i];
while(i<j)
{
while(i<j&&nums[j]>=partition)
{
j--;
}
nums[i]=nums[j];
while(i<j&&nums[i]<=partition)
{
i++;
}
nums[j]=nums[i];
}
nums[i]=partition;
quicksort(nums,l,i-1);
quicksort(nums,i+1,r);
}
带随机选择的快速排序
void quicksort(vector<int> &nums, int l, int r)
{
if(l>=r){return;}
int i=l;
int j=r;
int index=rand()%(r-l+1)+l;
int partition=nums[index];
nums[index]=nums[l];
while(i<j)
{
while(i<j&&nums[j]>=partition)
{
j--;
}
nums[i]=nums[j];
while(i<j&&nums[i]<=partition)
{
i++;
}
nums[j]=nums[i];
}
nums[i]=partition;
quicksort(nums,l,i-1);
quicksort(nums,i+1,r);
}