#ifndef kimi_quicksort
#define kimi_quicksort
#include <functional>
#include <iterator>
#include <algorithm>
namespace kimi_boost
{
using namespace std;
template<class RandomAccessIterator>
void quicksort(RandomAccessIterator first, RandomAccessIterator last)
{
//>= and <= operator
typedef greater_equal<
typename iterator_traits<RandomAccessIterator>::value_type >
Compare1;
typedef less_equal<
typename iterator_traits<RandomAccessIterator>::value_type >
Compare2;
if (distance(first,last) <= 1) return;
RandomAccessIterator i = first, j = last-1, n = first;
//partition
while (i < j)
{
while (i < j && Compare1()(*j,*n) ) --j;
iter_swap(n, j);
n = j;
while (i < j && Compare2()(*i,*n) ) ++i;
iter_swap(n, i);
n = i;
}
//递归
if(first != n)
quicksort(first, n - 1);
if(n != last)
quicksort(n + 1, last);
}
}
#endif//kimi_quicksort
void loki_pool_test2()
{
std::vector<unsigned> vi;
std::deque<unsigned> di;
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
vi.push_back(rand());
di.assign(vi.begin(), vi.end());
kimi_boost::quicksort(vi.begin(), vi.end());
copy(vi.begin(), vi.end(), ostream_iterator<unsigned>(cout," "));
cout<<endl;
kimi_boost::quicksort(di.begin(), di.end());
copy(di.begin(), di.end(), ostream_iterator<unsigned>(cout," "));
}
41 5705 6334 11478 15724 18467 19169 24464 26962 28145 26500 29358
41 5705 6334 11478 15724 18467 19169 24464 26962 28145 26500 29358