Sort Colors_计数排序

第一种思路是计数排序,不过需要两趟才能完成。第二种思路是定义两个index,每次将红色交换至最前,将蓝色交换至最后,白色保持不变,很巧妙的思路。

Sort Colors_i++_02Sort Colors_i++_03

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