思路:
#include<iostream> #include<vector> using namespace std; class ThreeColor { public: vector<int> sortThreeColor(vector<int> &A, int n) { int f,r,i,temp; //遍历之前数组的左设置一个为空的0区,数组右侧设置一个为空的2区 for(i=f=0,r=n-1;i<=r;i++)//f指向0区的下一位置,r指向2区的下一位置 { if(A[i]==0)//当前值是0,把当前值和0区的下一个位置的元素进行交换,0区向后扩一个位置 { temp=A[f]; A[f]=A[i]; A[i]=temp; f++; //因为是从前向后遍历,所以从前面换来的数字已经遍历过,无需从新遍历 } if(A[i]==2)//当前值是2,把当前值和2区的前一个位置的元素进行交换,2区向前扩一个位置 { temp=A[r]; A[r]=A[i]; A[i]=temp; r--; i--;//从后面换来的数字还没有遍历过,需从新遍历 } } return A; } }; int main() { int a[6]={1,2,0,2}; vector<int> b(a,a+4); ThreeColor c; c.sortThreeColor(b,4); for(int i=0;i<4;i++) cout<<b[i]<<" "; cout<<endl; return 0; }
原文:https://www.cnblogs.com/tianzeng/p/11218875.html