荷兰国旗问题:设有一个仅由红、白、蓝三种颜色的条块组成的条状序列,存储在一个顺序表中,请编写一个时间复杂度为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;
}