Cod sursa(job #946689)

Utilizator vendettaSalajan Razvan vendetta Data 5 mai 2013 16:57:14
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <vector>
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

vector<int> v;

class quickSort{
    inline pair<int,int> partitioneaza(vector<int> &v, int st, int dr){
        // imi iau un pivot in jurul caruia voi aranaja elementele adica la sfarsit o sa fie ceva in genul
        // [st..poz] elementele din intervalul asta vor fi <= cu pivotul iar intervalul [poz+1, dr] va fi >= cu pivotul
        int i = st; int j = dr;
        int pivot = v[(st+dr) >> 1];
        for(; i<=j;){
            for(; v[i]<pivot; ++i);// cat timp e corect
            for(; v[j]>pivot; --j);
            // acum v[i] >= pivot si v[j] <= pivot
            if (i <= j){
                swap(v[i], v[j]);
                ++i, --j;
            }
        }
        return make_pair(i, j);
    }
    void sorteaza(vector<int> &v, int st, int dr){
        // partitionez intervalul curent
        if (st >= dr) return;
        pair<int,int> act = partitioneaza(v, st, dr);
        sorteaza(v, st, act.second);
        sorteaza(v, act.first, dr);
    }
    public:
        vector<int> Sort(vector<int> v){
            sorteaza(v, 0, v.size()-1);
            return v;
        }
};

int main(){
    int n = 0;
    f >> n;
    int x = 0;
    for(int i=1; i<=n; ++i) f >> x, v.push_back(x);
    quickSort X;
    v = X.Sort(v);
    for(int i=0; i<(int)v.size(); ++i) g << v[i] << " ";
}