Cod sursa(job #2076376)

Utilizator dariusdariusMarian Darius dariusdarius Data 26 noiembrie 2017 14:56:37
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;

const int MAX_N = 500005;

int a[MAX_N];

void QuickSort(int left, int right) {
    if (left >= right) {
        return;
    }
    swap(a[left], a[left + rand() % (right - left + 1)]);
    int i = left, j = right;
    while (i < j) {
        if (a[i] > a[i + 1] || (a[i] == a[i + 1] && rand() % 2)) {
            swap(a[i], a[i + 1]);
            ++ i;
        } else {
            swap(a[i + 1], a[j]);
            -- j;
        }
    }
    QuickSort(left, i - 1);
    QuickSort(i + 1, right);
}

int main() {
    ifstream cin("algsort.in");
    ofstream cout("algsort.out");
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++ i) {
        cin >> a[i];
    }
    QuickSort(1, n);
    for (int i = 1; i <= n; ++ i) {
        cout << a[i] << (i == n ? "\n" : " ");
    }
    return 0;
}