本文主要是介绍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]);}}
这篇关于C语言 荷兰国旗解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!