quickSort

#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>
using namespace std;
template<typename T>
class comparator
{
public:
   bool operator()(const T & p, const  T & q) const
   {
        return p < q;
   }
};
template<typename E, typename C>
void quickSort(vector<E> & S, const C & less)
{
   if( S.size() <= 1 ) return;
   quickSortStep(S,0,S.size()-1,less);
}
template<typename E, typename C>
void quickSortStep(vector<E> & S, int a, int b, const C & less)
{
   if( a >= b) return;
   E pivot=S[b];
   int l=a;
   int r=b-1;
   while( l <= r )
   {
       while( l <= r && !less(pivot, S[l])) ++l;
       while( r >= l && !less(S[r], pivot)) --r;
       if ( l < r ) swap(S[l],S[r]);
   }
   swap(S[l],S[b]);
   quickSortStep(S,a,l-1,less);
   quickSortStep(S,l+1,b,less);
}
int main()
{
    vector<int> V;
    comparator<int> cmp;
    int A[8]={3,-2,1,12,5,2,8,0};
    copy(A, A+8, back_inserter(V));
    quickSort(V, cmp);
    vector<int>::iterator p;
    for(p=V.begin(); p!=V.end(); ++p)
        cout<<*p<<" ";
    cout<<endl;
    return 0;
}

本文出自 “永夜” 博客,谢绝转载!

你可能感兴趣的:(Algorithm,sort,cpp,Quick)