荷兰国旗问题:设有一个仅由红、白、蓝三种颜色的条块组成的条状序列,存储在一个顺序表中,请编写一个时间复杂度为O(N)的算法,是这些条块按照红、白、蓝的顺序排好,即排成荷兰国旗图案。请完成算法实现:
#include <iostream>
#include <time.h>
#include <stdlib.h>
//用1,0,2表示红,白,蓝
int * testArray(int size)
{
int *tmp=(int*) malloc(sizeof(int )*size);
for(int i=0;i<size;i++)
{
tmp[i]=rand()%3;
}
return tmp;
}
void print(int *tmp,int size)
{
printf("the array is:");
for(int i=0;i<size;i++) printf("%3d",tmp[i]);
puts("");
}
void swap(int &x,int &y)
{
int tmp=x;
x=y;
y=tmp;
}
void flage_arrange(int *array,int size)
{
int l=0,m=0,r=size-1;
while(m<=r)
{
while(m<=r&&array[m]==1) swap(array[l],array[m]),l++,m++;
while(m<=r&&array[m]==0) m++;
while(m<=r&&array[m]==2) swap(array[m],array[r]),r--;
}
}
int main() {
srand(time(nullptr));
int *r1= testArray(10);
print(r1,10);
flage_arrange(r1,10);
print(r1,10);
return 0;
}