yqslovelwb1314

常用链接

统计

最新评论

荷兰国旗问题(C++)

问题描述:
3种颜色在一个数组里,每次只可交换一次,扫描一次后,三种颜色自然分开,应为颜色为:红,白,蓝,(荷兰国旗的颜色)所也叫荷兰国旗问题
//核心思路:统计出各种颜色的”国旗“的数量,然后按照指定顺序显示
代码实现:
        #include<iostream>
        using namespace std;
        void sortHL(int* a,int n) {
    int j=0,k=0,i;//i为数组下标,j记录有红色块数,k记录蓝色块数
            for(i=0;i<n;i++) {
         if(a[i]==1)//蓝色
             j++;
         if(a[i]==2)//红色
             k++;
          }
        //按规定的顺序排好
         for(i=0;i<=k-1;i++)//前k块为红色
         a[i]=2;
         for(i=k;i<=n-j;i++)//中间是白色
         a[i]=0;
         for(i=n-j;i<=n-1;i++)//后j块是蓝色
         a[i]=1;
    }
     int main() {
int a[]={1,2,0,1,2,0,1,2,1,0,2};//原数组
         int n=sizeof(a)/sizeof(int);//数组长度
         for(int i=0;i<n;i++)
    cout<<a[i]; //输出原来的数组
         cout<<endl;
         sortHL(a,n);
        for(i=0;i<n;i++)
    cout<<a[i];//输出排好的“国旗”
        cout<<endl;
         return 0;
}

posted on 2012-05-20 19:52 要是不用分离,多好 阅读(754) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: