问题
思路
参考[几种有关排序的常见面试问题]
基本思路就是partition。
增减begin cur end
begin 前面的元素全部是0,
end后面的元素全部是2.
[begin, cur)这个区间的全部是1,这是个很重要的特点!!!
代码
class Solution {
public:
void sortColors(vector<int>& nums) {
int begin = 0;
int end = nums.size() - 1;
int cur = 0;
while(cur <= end){
if( nums[cur] == 0 ) {
swap( nums[begin], nums[cur] );
++begin;
++cur;
}
else if ( nums[cur] == 1 ) ++ cur;
else{
swap( nums[end], nums[cur] );
end--;
}
}
}
};