#include<iostream> #include<vector> using namespace std; #define N 10 //荷兰国旗问题:现有红、白、蓝三个不同颜色的小球,乱序排列在一起,请重新排列这些小球,使得红白蓝三色的同颜色的球在一起。 //问题转换,给定数组A[0...N-1],元素只能取0,1,2三个值,设定算法使得所有的0在左边,所有的1在中间,所有的2在右边。 void printArray(int *a,int len) { for(int i=0;i<len;i++) cout<<a[i]<<" "; cout<<endl; } void swap(int &a,int &b) { int buf=a; a = b; b = buf; } void quickSort(int *a,int len) { int less=-1; int more=len; int p=0; while(p<more) { if(a[p] == 0) { swap(a[p],a[less+1]); less++; p++; } else if(a[p] == 2) { swap(a[p],a[more-1]); more--; } else { p++; } } } int main() { int a[N]={0,2,1,2,0,0,1,2,2,1}; quickSort(a,N); printArray(a,N); return 0; }这里借鉴的快速排序中的partition部分,需要注意的是,中==2(>1)的部分不进行p++。
荷兰国旗问题
猜你喜欢
转载自blog.csdn.net/u014228447/article/details/80636189
今日推荐
周排行