Cod sursa(job #1937791)

Utilizator elffikkVasile Ermicioi elffikk Data 24 martie 2017 11:48:15
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

void freeMemory(vector<int> &a) {
    a.clear();
    vector<int>(a).swap(a);
}

void qs(vector<int> &a) {
    if (a.size() < 2) {
        return;
    }
    vector<int> a1, a2, a3;
    int x = a[0];
    while (a.size() > 0) {
        int q = a.back();
        if (q < x) a1.push_back(q);
        else if (q == x) a2.push_back(q);
        else a3.push_back(q);
        a.pop_back();
    }
    freeMemory(a);
    qs(a1);
    qs(a3);
    a1.insert( a1.end(), a2.begin(), a2.end() );
    a1.insert( a1.end(), a3.begin(), a3.end() );
    a = a1;
    freeMemory(a1);
    freeMemory(a2);
    freeMemory(a3);
}


int main() {
    ifstream cin("algsort.in");
    ofstream cout("algsort.out");
    int n;
    cin>>n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin>>a[i];
    }
    qs(a);

    for (int i = 0; i < n; i++) {
        cout<<a[i]<<" ";
    }

    return 0;
}