第一种思路是计数排序,不过需要两趟才能完成。第二种思路是定义两个index,每次将红色交换至最前,将蓝色交换至最后,白色保持不变,很巧妙的思路。
void sortColors(int A[], int n)
{
int counts[3] = { 0 };
for (int i = 0; i < n; i++)
counts[A[i]]++;
for (int i = 0,index=0; i < 3;i++ )
for (int j = 0; j < counts[i]; j++)
A[index++] = i;
}
void sortColors1(int A[], int n)
{
int red = 0, blue = n - 1;
for (int i = 0; i < n;)
{
if (A[i] == 0)
swap(A[i++], A[red++]);//将红色交换至最前面
if (A[i] == 2)
swap(A[i], A[blue--]);//注意此时i不自加
else
i++;
}
}
View Code