荷兰旗问题(C语言实现)

//三色旗问题,也叫荷兰旗问题
//一根绳子上有一些蓝色、白色、红色的旗子,它们的排列顺序是随意的
//现要求把旗子分类并按照蓝色的旗子都在前,红色的旗子都在后,白色的旗子在中间的顺序排列
//你只能在一根绳子上操纵这一切,并且一次只能调换两个旗子

#include <stdio.h>
#define MAX_FLAG 30
#define BLUE 'B'
#define WHITE 'W'
#define RED 'R'




//这个算法就像进度条推进,先是红条占满,接着白条推进,最后蓝条推进
void DutchFlag(int n,char flagArr[MAX_FLAG])
{
	int rflag=n-1,bflag=0,wflag=0;//假设一开始全是红旗,一条红.wflag始终指向当前检测的旗子
	while (wflag<=rflag)
	{
		if (flagArr[wflag]==WHITE)//有白旗,白条开始往后推进
		{
			++wflag;
		}
		else if(flagArr[wflag]==BLUE)//有蓝旗,蓝条开始往后推进
		{
			char temp = flagArr[wflag];
			flagArr[wflag] = flagArr[bflag];
			flagArr[bflag] = temp;
			++bflag;//bflag是蓝旗数,是蓝旗的结束点的后一位
			++wflag;//同时白条也往后挪,wflag-bflag就是白旗数,wflag是白旗的结束点
		}
		else
		{	//仅当当前wflag指的是红旗,而后面rflag指的不是红旗时才发生交换。如果前后指的都是红旗,则直接把rfl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值