Cod sursa(job #2705830)

Utilizator vladm98Munteanu Vlad vladm98 Data 13 februarie 2021 13:17:18
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;

int v[3000003];
int aux[3000003];


int randomNumber(int a, int b) {
    return abs((rand() << 14) + rand()) % (b - a + 1) + a;
}

void quickSort (int left, int right) {
    if (left == right) return;
    int pivot = randomNumber(left, right);
    int currentAuxPosition = left;
    for (int i = left; i <= right; ++i) {
        if (v[pivot] > v[i]) {
            aux[currentAuxPosition] = v[i];
            currentAuxPosition += 1;
        }
    }
    int firstPivot = currentAuxPosition;
    for (int i = left; i <= right; ++i) {
        if (v[pivot] == v[i]) {
            aux[currentAuxPosition] = v[i];
            currentAuxPosition += 1;
        }
    }
    int lastPivot = currentAuxPosition - 1;
    for (int i = left; i <= right; ++i) {
        if (v[pivot] < v[i]) {
            aux[currentAuxPosition] = v[i];
            currentAuxPosition += 1;
        }
    }
    for (int i = left; i <= right; ++i) {
        v[i] = aux[i];
    }
    if (firstPivot > left) {
        quickSort(left, firstPivot - 1);
    }
    if (lastPivot < right) {
        quickSort(lastPivot + 1, right);
    }
}

int main()
{
    ifstream fin ("algsort.in");
    ofstream fout ("algsort.out");
    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;
}