/*********************************************
荷兰国旗:
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]);
}
}