Cod sursa(job #2587242)

Utilizator vladm98Munteanu Vlad vladm98 Data 22 martie 2020 15:23:30
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>

using namespace std;

default_random_engine generator;
uniform_int_distribution <int> distribution (0, 1000000000);

int getRand() {
    return distribution(generator);
}

int randomElem(int a, int b) {
    return getRand() % (b - a + 1) + a;
}

int v[500005];
int copie[500005];

void quickSort(int left, int right) {
    if (left >= right) return;
    int pivot = randomElem(left, right);
    int start = left;
    for (int i = left; i <= right; ++i) {
        if (v[i] < v[pivot]) {
            copie[start] = v[i];
            start += 1;
        }
    }
    int middle = start;
    copie[start] = v[pivot];
    start += 1;
    for (int i = left; i <= right; ++i) {
        if (v[i] >= v[pivot] and i != pivot) {
            copie[start] = v[i];
            start += 1;
        }
    }
    for (int i = left; i <= right; ++i) {
        v[i] = copie[i];
    }
    quickSort(left, middle - 1);
    quickSort(middle + 1, right);
}

int main()
{
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    ios::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);
    int n;
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> v[i];
    }
    quickSort(1, n);
    for (int i = 1; i <= n; ++i) {
        fout << v[i] << ' ';
    }
    return 0;
}