设有顺序放置的N个桶,每个桶中装有一粒砾石,每粒的颜色是红、白、黑之一,要求重新安排这些砾石,使得所有的红色的在前,白色的在中,黑色的在后。重新安排时,对每粒砾石的颜色只能查看一次,并且只允许交换操作来调整位置。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef struct
{
char color[MAXSIZE];
int num;
}Bucket;
void init(Bucket *bucket);
void print(Bucket *bucket,int n);
void Sort(Bucket *bucket);
void Swap(Bucket *bucket,int i,int j);
int main()
{
int i;
Bucket *bucket;
bucket=(Bucket *)malloc(sizeof(Bucket));
printf("有多少个桶(最多20个)?");
scanf("%d",&bucket->num);
init(bucket);
for(i=0;i<bucket->num;i++)
print(bucket,i);
Sort(bucket);
printf("\n排序结果为:");
for(i=0;i<bucket->num;i++)
print(bucket,i);
printf("\n");
return 0;
}
void Sort(Bucket *bucket)
{
int i=0,r,b;
r=-1;
b=bucket->num;
while(i<b)
switch(bucket->color[i])
{
case 'r':Swap(bucket,++r,i++);break;
case 'w':i++;break;
case