两次扫描使用计数排序
void sortColors(std::vector<int>& nums) {
int a=0;
int b=0;
int c=0;
for(int i=0;i<nums.size();i++){
if(nums[i]==0)
a++;
if(nums[i]==1)
b++;
if(nums[i]==2)
c++;
}
for(int i=0;i<a;i++){
nums[i]=0;
}
for(int i=a;i<a+b;i++)
nums[i]=1;
for(int i=a+b;i<a+b+c;i++){
nums[i]=2;
}
}
一次扫描使用交换的方式,可以简单的解决
void sortColors(std::vector<int>& nums) {
int l=0;
int r=nums.size()-1;
int temp=-1;
int i=0;
while(i<nums.size()){
if (nums[i] == 0) {
if(l<i) {
temp = nums[i];
nums[i] = nums[l];
nums[l] = temp;
l++;
}
else
i++;
} else if (nums[i] == 2) {
if(r>i) {
temp = nums[i];
nums[i] = nums[r];
nums[r] = temp;
r--;
}else
i++;
}
else
i++;
}
}