📄 10.32.c
字号:
10.32⑤ 荷兰国旗问题:设有一个仅由红、白、兰
这三种颜色的条块组成的条块序列。请编写一个时
间复杂度为O(n)的算法,使得这些条块按红、白、
兰的顺序排好,即排成荷兰国旗图案。
实现下列函数:
void HFlag(FlagList &f)
/* "荷兰国旗"的元素为red,white和blue,*/
/* 分别用字符'0','1'和'2'表示 */
"荷兰国旗"的顺序表的类型FlagList定义如下:
#define red '0'
#define white '1'
#define blue '2'
typedef char ColorType;
typedef struct {
ColorType r[MAX_LENGTH+1];
int length;
} FlagList;
void HFlag(FlagList &f)
{
int r=0,w=0,b=0,i,j;
for(i=1;i<=f.length;i++)
{if(f.r[i]==red) r++;
else if(f.r[i]==white) w++;
else b++;
}
for(i=1,j=1;j<=r;j++,i++) f.r[i]=red;
for(j=1;j<=w;j++,i++) f.r[i]=white;
for(j=1;j<=b;j++,i++) f.r[i]=blue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -