第一种思路是计数排序,不过需要两趟才能完成。第二种思路是定义两个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++; } }