问题描述:现有n个红白蓝三种不同颜色的小球,乱序排在一起,请通过两两交换任意两个小球,使得从左到右的求球依次是红球,白球,蓝球,分别用0,1,2表示。
技巧:用三个指针 一个前指针begin,一个中指针current,一个后指针end,current指针遍历 整个数组序列。
1,当current所指元素为0时,与begin指针所指的元素交换,而后current++,begin++;
2,当current所指元素为1时,不交换任何小球,而后current++;
3,当current所指元素为2时,与end指针所指的元素交换,而后current指针不动,end - -;
while(current <= end)
{
if (array[current] == 0)
{
swap(array[current], array[begin]);
current++;
begin++;
}
else if (array[current] == 1)
{
current++;
}
else
{
swap(array[current], array[end]);
end--;
}
}