Sort Colors

/*
写了个快排,但这肯定不是最优的解法,果然有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++;
     }
    }
};
原文地址:https://www.cnblogs.com/llei1573/p/4376419.html