Cod sursa(job #2082846)

Utilizator Teodor.mTeodor Marchitan Teodor.m Data 6 decembrie 2017 20:44:01
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

int a[500005];
int n;

int partitionare(int a[], int st, int dr)
{
    swap(a[dr], a[rand()%(dr - st + 1) + st]);
    int pivot = a[dr];
    int i = st - 1;
    int j = dr + 1;
    while(true) {
        do {
            ++i;
        }while(a[i] < pivot);

        do{
            --j;
        }while(a[j] > pivot);

        if(i > j)
            return i - 1;
        else
            swap(a[i], a[j]);
    }
}

void Q_Sort(int a[], int st, int dr)
{
    if(st < dr) {
        int q = partitionare(a, st, dr);
        Q_Sort(a, st, q);
        Q_Sort(a, q + 1, dr);
    }
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    srand(time(0));
    cin >> n;

    for(int i = 1; i <= n; ++i) cin >> a[i];

    a[0] = a[n + 1] = INT_MAX;
    Q_Sort(a, 1, n);

    for(int i = 1; i <= n; ++i) cout << a[i] << " ";

    return 0;
}