75. 颜色分类
思路:快速排序,不能使用自带的sort,那我们就自己写一个快排出来。注意点就在,进行递归时使用的是j,而不是i,这是因为i>=j,使用i会造成堆栈溢出的情况。
class Solution {
public:
void quick_sort(vector<int>& nums,int l,int r){
if(l>=r) return ;
int i=l-1,j=r+1;
int tmp=nums[(i+j)/2];
do{
do{
i++;
}while(nums[i]<tmp);
do{
j--;
}while(nums[j]>tmp);
if(i<j) swap(nums[i],nums[j]);
}while(i<j);
quick_sort(nums,l,j);//这里一定要用j,不能用i,确保快速排序在递归时正确地将数组分成较小的子数组,并对子数组进行排序,避免了堆栈溢出错误。
quick_sort(nums,j+1,r);
}
void sortColors(vector<int>& nums) {
int lens=nums.size();
quick_sort(nums,0,lens-1);
}
};