/*
写了个快排,但这肯定不是最优的解法,果然有O(n)的相当于快排的partition部分
*/
class Solution { public: void Qsort(int A[],int l,int r){ if(l>=r) return; int x = A[l],i =l,j =r; while(i<j){ while(i<j&&A[j]>=x)j--; A[i] = A[j]; while(i<j&&A[i]<=x)i++; A[j] = A[i]; } A[i] = x; Qsort(A,l,i-1); Qsort(A,i+1,r); } void sortColors(int A[], int n) { int l =0,r = n-1; Qsort(A,l,r); } };
快排用了5ms,这种方法到用了6ms ORZ
class Solution { public: void sortColors(int A[], int n) { int i = 0,j = n-1,k = 0; while(i<=j){ if(A[i]<1){ swap(A[i],A[k]);i++;k++; }else if(A[i]>1){ swap(A[i],A[j]);j--; }else i++; } } };