//题目:将乱序的红白蓝三色小球排成同颜色在一起的小球组(按红白蓝排序),这个问题称为荷兰国旗问题。
//思想:类似于partition过程。利用三个指针,一前begin,一中current,一后end,begin和current都初始
//化指向数组首部,end初始化指向数组尾部。
//current遍历整个数组序列,current指向0时,与begin交换,而后current++,begin++;
//current指向1时,不交换,current++;current指向2时,与end交换,而后current不动,end--;
#include<iostream>
using namespace std;
void ThreeColorBallSort(int a[],int low,int high)
{
int begin = low,current = low,end = high;
while(current <= end)
{
if(a[current]==0)
{
swap(a[current],a[begin]);
begin++;
current++;
}
else if(a[current] == 1)
{
current++;
}
else
{
swap(a[current],a[end]);
end--;
}
}
}
void main()
{
int a[10]={0,1,2,1,1,2,0,2,1,0};
ThreeColorBallSort(a,0,9);
for(int i = 0;i<9;++i)
cout<<a[i]<<' ';
cout<<endl;
}
荷兰国旗问题
最新推荐文章于 2021-01-23 15:13:34 发布