//
// main.cpp
// Algorithm_rehersal
//
// Created by on 13-12-2.
// Copyright (c) 2013年 . All rights reserved.
//
#include <map>
#include <list>
#include <iostream>
#include <vector>
#include <string>
#include <numeric>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
template<typename T>
struct random_pivot{
random_pivot(){
srand(time(NULL));
}
T operator()(T begin, T end) {
return begin + (rand() % (end - begin));
}
};
template<typename T>
T partition( T begin, T end, T pivot)
{
swap(*pivot, *begin);
pivot = begin;
T head = begin;
T tail = end - 1;
while( head <= tail )
{
while( *tail >= *pivot && head <= tail ) tail--;
if( *tail < *pivot && head <= tail )
{
swap(*pivot, *tail);
pivot = tail;
tail--;
}
while( *head <= *pivot && head <= tail ) head++;
if( *head > *pivot && head <= tail )
{
swap(*pivot, *head);
pivot = head;
head++;
}
}
return pivot;
}
template<typename T, typename PF>
void __QuickSort(T begin, T end, PF pf)
{
if( begin < end-1 )
{
T pivot = pf(begin, end);
pivot = partition(begin, end, pivot);
__QuickSort(begin, pivot, pf);
__QuickSort(pivot+1, end, pf);
}
}
template<typename T>
void QuickSort(T begin, T end)
{
__QuickSort(begin, end, random_pivot<T>());
}
int main(int argc, const char * argv[])
{
// Test case for Quick Sort algorithm.
vector<string> v(10);
v[0]="Paris";
v[1]="London";
v[2]="Stockholm";
v[3]="Berlin";
v[4]="Oslo";
v[5]="Rome";
v[6]="Madrid";
v[7]="Tallinn";
v[8]="Amsterdam";
v[9]="Dublin";
vector<int> u = {3, 8, 10, 6, 7, 4, 2, 1, 9, 13, 11, 18, 23, 19, 12, 5, 14};
cout << "u before qsort: " << endl;
for( auto each: u)
{
cout << each << " ";
}
cout << endl;
QuickSort(u.begin(), u.end());
cout << "u after qsort: " << endl;
for( auto each: u)
{
cout << each << " ";
}
cout << endl;
return 0;
}
QuickSort C++
最新推荐文章于 2024-07-12 16:34:36 发布