<span>荷兰国旗问题</span>

荷兰国旗问题:

现有红,白,蓝三个不同颜色的小球,乱序排列在一起,重新排列这些小球,使得红白蓝三色的同颜色的球在一起。

问题分析:

问题转换为:给定数组A[0,1,...,N-1],元素只能取0,1,2三个值,设计算法使得数组重新排列成“000...111..222”的形式。

可以使用三个游标,begin=0,cur=0,end=N-1。

程序实现:

 1 /***************************************
 2 FileName HollandFlag.cpp
 3 Author : godfrey
 4 CreatedTime : 2016/5/4
 5 ****************************************/
 6 #include <iostream>
 7 #include <cstring>
 8 #include <vector>
 9 #include <algorithm>
10 #include <stdio.h>
11 #include <stdlib.h>
12 
13 using namespace std;
14 
15 void HollandFlag(int* A,int size){
16     int begin = 0;
17     int end = size - 1;
18     int cur = 0;
19     while(cur <= end){
20         if(A[cur] == 2){
21             swap(A[cur],A[end]);
22             end --;
23         }
24         else if(A[cur] == 1){
25             cur ++;
26         }
27         else if(A[cur] == 0){
28             swap(A[cur],A[begin]);//这里简化了步骤,提醒:cur与begin是否相同,分情况考虑
29             begin ++;
30             cur ++;
31         }
32     }
33 }
34 int main()
35 {
36     int a[] = {0,1,2,0,0,2,1,2,1,2,2,1,1,0};
37     int size = sizeof(a)/sizeof(int);
38     for(int i=0;i<size;i++){
39         cout<<a[i]<<" ";
40     }
41     cout<<endl;
42     HollandFlag(a,size);
43     cout<<"-----------After adjusting ------------"<<endl;
44     for(int i=0;i<size;i++){
45         cout<<a[i]<<" ";
46     }
47     cout<<endl;
48     return 0;
49 }

运行结果:

转载请注明出处:

C++博客园:godfrey_88

http://www.cnblogs.com/gaobaoru-articles/

 

全部评论

相关推荐

暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务