QuickSort C++

//
//  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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值