Sort Colors

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

 

posted @ 2016-07-13 09:02  牧马人夏峥  阅读(130)  评论(0)    收藏  举报