荷兰国旗问题

williamf 2001-12-12 02:18:47
设有一个仅由红白兰三种颜色的条块组成的条块序列,请编写一个时间复杂度为O(n)的算法,使得这些条块按红白兰的顺序排好,即为荷兰国旗图案。
...全文
137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘爱贵 2001-12-15
  • 打赏
  • 举报
回复
上面的算法走一趟就可完成,时间复杂度不是n,如果是N 就太简单了
刘爱贵 2001-12-15
  • 打赏
  • 举报
回复
#define R 14
#define G 10
#define B 6
#define N 10
typedef int color;
color a[N]={R,G,G,B,B,R,G,G,R,R};
void Flag_Arrange(color *array,int n)
{
int i=0,j=0,k=n-1;
int temp;
while(j<=k)
{
switch(array[j])
{
case R:
temp=array[i];
array[i]=array[j];
array[j]=temp;
i++;
j++;
break;
case G:
j++;
break;
case B:
temp=array[k];
array[k]=array[j];
array[j]=temp;
k--;
break;
}
}
}
void Print(color *array)
{
int i;
for(i=0;i<N;i++)
switch(array[i])
{
case R:printf("%4c",'R');break;
case G:printf("%4c",'G');break;
case B:printf("%4c",'B');break;
}
printf("\n");
}
main()
{
clrscr();
printf("Before FlagArrange:\n");
Print(a);
Flag_Arrange(a,N);
printf("After FalgArrange:\n");
Print(a);
getch();
}
one_add_one 2001-12-14
  • 打赏
  • 举报
回复
#define 红 0
#define 白 1
#define 蓝 2

int P[3];
main(){
int i,j;
for (i=0;i<n;i++)
p[color[i]]++;
for (i=0;i<3;i++)
for (j=0;j<p[i];j++)
printf("%d",i);
}
one_add_one 2001-12-14
  • 打赏
  • 举报
回复
#define 红 0
#define 白 1
#define 蓝 2

int P[3];
main(){
int i,j;
for (i=0;i<n;i++)
p[color]++;
for (i=0;i<3;i++)
for (j=0;j<p[i];j++)
printf("%d",i);
}
williamf 2001-12-13
  • 打赏
  • 举报
回复
what?
starfish 2001-12-13
  • 打赏
  • 举报
回复
计数排序

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧