滿足要求時間複雜度O(n),空間複雜度O(1),且只能遍歷一次序列(IGT筆試題):
void SortRGB(char *str){
if(str==NULL)
return;
char *pBegin=str;
char *pEnd=str;
while(*pEnd!='\0')
pEnd++;
pEnd--;
char *pG=pBegin;
char *pB=pEnd;
while(pBegin<pEnd)
{
if(*pBegin=='R')
{
if(pG<pBegin)
{
*pBegin='G';
*pG='R';
}
pG++;
pBegin++;
}
else if(*pBegin=='G')
{
pBegin++;
}
else if(*pBegin=='B')
{
while(*pB=='B')
pB--;
*pBegin=*pB;
*pB='B';
pB--;
pEnd=pB;
}
}
}