【算法】荷兰国旗
来源:互联网 发布:linux进程间通信 ipc 编辑:程序博客网 时间:2024/06/02 22:37
1.问题描述:
我们将乱序的红白蓝三色小球排列成有序的红白蓝三色的同颜色在一起的小球组。这个问题之所以叫荷兰国旗,是因为我们可以将红白蓝三色小球想象成条状物,有序排列后正好组成荷兰国旗。
2.问题分析:
这个问题我们可以将这个问题视为一个数组排序问题,这个数组分为前部,中部和后部三个部分,每一个元素(红白蓝分别对应0、1、2)必属于其中之一。由于红、白、蓝三色小球数量并不一定相同,所以这个三个区域不一定是等分的,也就是说如果我们将整个区域放在[0,1]的区域里,由于三色小球之间数量的比不同(此处假设1:2:2),可能前部为[0,0.2),中部为[0.2,0.6),后部为[0.6,1]。我们的思路如下:将前部和后部各排在数组的前边和后边,中部自然就排好了。具体的:
设置两个标志位begin和end分别指向这个数组的开始和末尾,然后用一个标志位current从头开始进行遍历:
1)若遍历到的位置为0,则说明它一定属于前部,于是就和begin位置进行交换,然后current向前进,begin也向前进(表示前边的已经都排好了)。
2)若遍历到的位置为1,则说明它一定属于中部,根据总思路,中部的我们都不动,然后current向前进。
3)若遍历到的位置为2,则说明它一定属于后部,于是就和end位置进行交换,由于交换完毕后current指向的可能是属于前部的,若此时current前进则会导致该位置不能被交换到前部,所以此时current不前进。而同1),end向后退1。
3.解决代码:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gnuhpc/archive/2011/02/25/6207285.aspx
- 【算法】荷兰国旗
- 【算法】荷兰国旗
- 【算法习作】荷兰国旗问题
- 荷兰国旗算法及其拓展
- 算法学习-荷兰国旗问题
- 算法之荷兰国旗问题
- 算法系列--荷兰国旗问题
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- C# 实现广播
- SMP865X广告机之节能模式(power saving)
- 塞班中,关于用C++调用jar文件
- WF4.0实战(三):WCF服务
- 算法之 求两个数的最大公约数 C++实现
- 【算法】荷兰国旗
- 系统钩子贴收集
- Making a Service Available Across Domain Boundaries
- JavaScript Date对象
- 用dom4j+xpath的方式对xml文件进行读取
- 不在轻狂也就不再年少
- wxWidgets 屏幕截图
- 取得andorid手机SD卡路径 2.1和2.2区别
- 内存泄漏检查-手工办法