Cod sursa(job #946679)

Utilizator vendettaSalajan Razvan vendetta Data 5 mai 2013 16:36:40
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <vector>
#include <iostream>
#include <fstream>

using namespace std;

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

vector<int> v;

class quickSort{
    inline 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<=dr; ++i);// cat timp e corect
            for(; v[j]>pivot && j>=st; --j);
            // acum v[i] >= pivot si v[j] <= pivot
            if (i >= j) return j;
            swap(v[i], v[j]);
            ++i, --j;
        }
    }
    void sorteaza(vector<int> &v, int st, int dr){
        // partitionez intervalul curent
        if (st >= dr) return;
        int poz = partitioneaza(v, st, dr);
        sorteaza(v, st, poz);
        sorteaza(v, poz+1, 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] << " ";
}