C语言 荷兰国旗解法

/*********************************************
荷兰国旗:
1,分别定义i,j,t,i最小下标,j最大下标,t从头遍历到j的下标。
2,如果t指向的球是0,要与i互换(i++,t++)。 
3,如果t指向的球是1,不用互换(t++)。
3,如果t指向的球是2,与j互换(j--)。 
注意事项:第3步不要执行t++因为与最后元素互换后,
t可能指向0或者2元素,还需要与i再进行一次比较。 
************************************************/ 
#include<stdio.h>
void hh(int *p1,int *p2) //互换函数 
{
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp; 
}
void helan(int a[])
{
	int i = 0,j = 7,t = 0;//i最小下标j最大下标,t从i遍历到j的下标
	while(t<=j)
	{
		if(a[t]==0)//如果是红球与i指向的元素互换
		{
			hh(&a[t],&a[i]);
			i++;
			t++; 
		}
		else if(a[t]==1)//如果是白球不需要互换 
		{
			t++;
		}
		else//如果是蓝球与j指向的元素互换 
		{
			hh(&a[t],&a[j]);
			j--;//不要执行t++因为与最后元素互换后,t可能指向0或者2元素,还需要与i进行一次比较
		}
	} 
}
void main()
{
	int i,a[8] = {2,1,1,0,2,2,0,1};
	helan(a);//传递最小下标和最大下标 
	for(i = 0;i<8;i++)
	{
		printf("%d\t",a[i]);
	}
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.海上月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值