Sort Colors

来源:互联网 发布:mac spss许可证 编辑:程序博客网 时间:2024/05/21 14:59
class Solution {public:    void sortColors(int A[], int n) {        if(n==0)        {            return;        }        int ptr0=-1;        int ptr2=n;        int ptr1=0;        while((ptr1<n)&&(A[ptr1]==0))        {            ptr1++;        }        ptr0=ptr1;        ptr1=n-1;        while((ptr1>=0)&&(A[ptr1]==2))        {            ptr1--;        }        ptr2=ptr1;        if(ptr0>=ptr2)        {            return;        }        ptr1=ptr0;        while((ptr0<=ptr1)&&(ptr1<=ptr2))        {            switch(A[ptr1])            {                case 0:                A[ptr1]=A[ptr0];                A[ptr0]=0;                ptr0++;                ptr1=ptr0;                break;                case 1:                ptr1++;                break;                case 2:                A[ptr1]=A[ptr2];                A[ptr2]=2;                ptr2--;                break;            }        }    }};


基本思路,维护3个位置值,姑且称其为指针。ptr0之前维护的值为0,ptr2之后维护的值为2,ptr0与ptr2之间(包括ptr0与ptr2)是待确定的值,用ptr1来扫描。ptr1与ptr0之间维护的是1。如果ptr1指向的值为0,则与ptr0位置处的值交换,如果ptr1指向的值为2,则与ptr2位置处的值交换。注意由于考虑的是ptr0与ptr2之间的值,所以每次更新ptr0后也要讲ptr1更新的新的位置。

0 0