这个是看书上面的一段代码:
#include <stdio.h> void swap(int x,int y,char *p) { char temp; temp=p[x]; p[x]=p[y]; p[y]=temp; } void output(char *p,int size) { printf("修整后的旗子顺序为:"); for(int k=0;k<size;k++) { printf("%c",p[k]); } } void threeColor(char *p,int size) { int count=0; int b=0; int r=size-1; int i=0; while(r-i+1) { if(p[i]=='b') { if(p[b]!='b') { swap(b,i,p); } b=b+1; i=i+1; count=count+1; } else if(p[i]=='r') { if(p[r]!='r') { swap(r,i,p); } count=count+1; r=r-1; } else if(p[i]=='w') { i=i+1; } } printf("交换了%d次\n",count); }
void main() { int size; char *p=new char; printf("您要输入几面旗子呢\n"); scanf("%d",&size); for(int j=0;j<size;j++) { printf("第%d面旗子的颜色:\n",j+1); scanf("%s",&p[j]); } threeColor(p, size); output(p, size); }
算法的思想主要是:为了将所有的旗子按照蓝白红排列。
(1)设置b和w的指针放在开始,将r指针放在末尾
(2)移动w指针,遇到蓝,则与b指针所指调换顺序,w和b各加1;遇到白,则w+1;遇到红,则与r调换,并且r=r-1
(3)当指针w和r相遇时,结束算法
|
请发表评论