博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
荷兰国旗问题
阅读量:5235 次
发布时间:2019-06-14

本文共 1083 字,大约阅读时间需要 3 分钟。

荷兰国旗问题:

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

问题分析:

问题转换为:给定数组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 
7 #include
8 #include
9 #include
10 #include
11 #include
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

运行结果:

转载请注明出处:

C++博客园:godfrey_88

 

转载于:https://www.cnblogs.com/gaobaoru-articles/p/5459988.html

你可能感兴趣的文章
AFNetwork 作用和用法详解
查看>>
JSON简介
查看>>
HDOJ 1465 不容易系列之一 【错排公式 递推】
查看>>
html4
查看>>
javascript中,单引号是转义字符,就是让编辑器认为他后面的东西就是这个意思。...
查看>>
一次SSM项目记录
查看>>
算法与数据结构基础(一)排序基础1.选择排序
查看>>
【Leetcode_easy】832. Flipping an Image
查看>>
Codeforces712B【= =】
查看>>
[POI2008]砖块Klo
查看>>
HttpClient参观记:.net core 2.2 对HttpClient到底做了什么?
查看>>
Java扫描指定包中所有类
查看>>
MyEclipse启动性能优化(----加快启动速度)
查看>>
C#中文件操作
查看>>
LoadRunner使用odbc时报错can't get hostname for your address的解决方法
查看>>
(三)ubuntu学习前传—uboot常见环境变量
查看>>
Saiku去掉登录模块
查看>>
直接插入排序
查看>>
DAO设计模式
查看>>
GET和POST请求方式
查看>>