算法概述:
其實要實行這演算法抓住這幾個原則:
在 0 到 b - 1 之間放藍色,b 到 w - 1 放白色,r + 1 到 n - 1 放紅色,而 w 到 r 之間元素未曾處理...
每一次都處理 w 所在元素,有三種情形:
1. 如果 w 所在位置是白色:那就把 w 加上 1
2. 如果 w 所在元素是藍色:把 b 與 w 所在元素對調,b、w 各加 1,維持上圖
3. 如果 w 所在元素是紅色:就把 w 和 r 元素互換,但是 r 減 1,w 不需減 1
#include "stdafx.h"
#include
#include
//swap(x,y) {char ctemp; ctemp=x; x=y; y=ctemp;}
int sanseqi(char a[], int acount);
int main(int argc, char* argv[])
{
char color[] = "bwrbwrbwrbwrbwrbwrbwr";
int iblue=0;
int iwhite=0;
int ired=sizeof(color)-2;
char temp;
while(iwhite <= ired)
{
if(color[iwhite] == 'w')
{
iwhite++;
}
else if(color[iwhite] == 'r')
{
temp = color[iwhite];
color[iwhite] = color[ired];
color[ired] = temp;
ired--;
}
else
{
temp = color[iblue];
color[iblue] = color[iwhite];
color[iwhite] = temp;
iwhite++;
iblue++;
}
}
// sanseqi(color,sizeof(color));
printf("%s",color);
printf("\n");
return 0;
}