Cod sursa(job #2650474)

Utilizator vladm98Munteanu Vlad vladm98 Data 18 septembrie 2020 23:18:16
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

int v[500004];
int sorted[500004];

int getRandom(int left, int right) {
    return (abs(rand() * 10000 + rand())) % (right - left + 1) + left;
}

void qsort(int left, int right) {
    if (left >= right) return;
    int pivot = getRandom(left, right);
    int currentIndex = left;
    for (int i = left; i <= right; ++i) {
        if (v[pivot] > v[i] or (v[pivot] == v[i] and i < pivot)) {
            sorted[currentIndex] = v[i];
            currentIndex += 1;
        }
    }
    sorted[currentIndex] = v[pivot];
    int middle = currentIndex;
    currentIndex += 1;
    for (int i = left; i <= right; ++i) {
        if (v[pivot] < v[i] or (v[pivot] == v[i] and i > pivot)) {
            sorted[currentIndex] = v[i];
            currentIndex += 1;
        }
    }
    for (int i = left; i <= right; ++i) {
        v[i] = sorted[i];
    }
    qsort(left, middle - 1);
    qsort(middle + 1, right);
}

int main() {
    ifstream fin ("algsort.in");
    ofstream fout ("algsort.in");
    int n;
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> v[i];
    }
    qsort(1, n);
    for (int i = 1; i <= n; ++i) {
        fout << v[i] << ' ';
    }
    return 0;
}