https://leetcode.com/problems/sort-colors/
取值有限的数组的排序都是可以这样用O(n)完成的
class Solution {
public:
void sortColors(vector<int>& nums) {
int cnt0=0,cnt1=0,cnt2=0;
for(int i=0; i<nums.size(); i++) {
switch (nums[i]) {
case 0:
cnt0++;
break;
case 1:
cnt1++;
break;
case 2:
cnt2++;
break;
}
}
int ptr0=0, ptr1=cnt0, ptr2=cnt1+cnt0;
for(int i=0; i<cnt1+cnt0; ) {
if( nums[i]==1 && !( i < cnt0+cnt1 && i >= cnt0 ) ) {
swap(nums[i], nums[ptr1]);
while( ptr1 < cnt0+cnt1 && nums[ptr1]==1 )ptr1++;
} else {
if( nums[i]==2 && !(i >= cnt0+cnt1) ){
swap(nums[i], nums[ptr2]);
while( ptr2 < nums.size() && nums[ptr2]==2 ) ptr2++;
}
}
if( nums[i] == 0 && i <cnt0 ||
nums[i]==1 && i < cnt0+cnt1 && i >= cnt0 ||
nums[i]==2 && i >= cnt0+cnt1) i++;
}
}
};