荷兰国旗问题

问题描述:现有n个红白蓝三种不同颜色的小球,乱序排在一起,请通过两两交换任意两个小球,使得从左到右的求球依次是红球,白球,蓝球,分别用0,1,2表示。

  技巧:用三个指针 一个前指针begin,一个中指针current,一个后指针end,current指针遍历 整个数组序列。

 1,当current所指元素为0时,与begin指针所指的元素交换,而后current++,begin++;

 2,当current所指元素为1时,不交换任何小球,而后current++;

 3,当current所指元素为2时,与end指针所指的元素交换,而后current指针不动,end - -;

  

 

while(current <= end)
{
	if (array[current] == 0)
	{
		swap(array[current], array[begin]);
		current++;
		begin++;
	}
	else if (array[current] == 1)
	{
		current++;
	}
	else
	{
		swap(array[current], array[end]);
		end--;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值