class Solution {
public:
void sortColors(vector<int>& nums) {
//荷兰国旗问题,分三部分处理
int l=0;//移动指针,表示待处理的数
int r=nums.size()-1;
int less = l - 1;//小于区域的右边界
int more = r+1;//大于区域的左边界
//移动指针和有边界相遇时处理结束
while(l<more)
{
if(nums[l]<1)
{
// nums[i]和小于边界后一个值交换。小于边界右移,指针右移
swap(nums[++less],nums[j++]);
}
else if(nums[l]>1)
{
//nums[l]和大于边界前一个值交换,大于边界左移,i不动,
//此时i位置会来一个新的未确定的数,因此不能移动
swap(nums[--more],nums[i]);
}
else
{
l++;
}
}
}
};