Cod sursa(job #1241183)

Utilizator gabrieligabrieli gabrieli Data 12 octombrie 2014 21:45:27
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <iterator>
#include <random>
#include <utility>
#include <vector>
using namespace std;

struct Generator {
    mt19937 gen;
    
    Generator() : gen() {}
    
    int operator()(const int& a, const int& b) {
        return uniform_int_distribution<int>(a, b)(gen);
    }
} uniform;

inline int partition(
        const int& left,
        const int& right,
        std::vector<int>& V) {
    // random pivot;    
    //swap(V[right], V[ uniform(left, right) ]);
    
    int pivot = left;
    for (int i = left; i < right; ++i)
        if (V[i] < V[right])
            swap(V[i], V[pivot++]);
    swap(V[right], V[pivot]);
    
    return pivot;
}

void quicksort(
        const int& left,
        const int& right,
        std::vector<int>& V) {
    if (left < right) {
        int pivot = partition(left, right, V);
        quicksort(left, pivot - 1, V);
        quicksort(pivot + 1, right, V);
    }
}

int main() {
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    
    int n; fin >> n;
    
    vector<int> V;
    copy(istream_iterator<int>(fin), istream_iterator<int>(), back_inserter(V));
    
    quicksort(0, V.size() - 1, V);
    
    copy(V.begin(), V.end(), ostream_iterator<int>(fout, " "));
    fout << endl;
    
    return 0;
}