Cod sursa(job #2134986)

Utilizator florin.elfusFlorin Elfus florin.elfus Data 18 februarie 2018 15:00:58
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream cin("algsort.in");
ofstream cout("algsort.out");

int x[500001], y[500001];

void smart_sort(int st, int dr) {
    if (st == dr) return;
    if (st + 1 == dr) {
        if (x[st] > x[dr])
            swap(x[st], x[dr]);
        return ;
    }
    int med = (st + dr) / 2;
    smart_sort(st, med);
    smart_sort(med + 1, dr);
    int i1 = st, i2 = med + 1;
    int pos = st;
    while (i1 <= med || i2 <= dr) {
        if (i1 > med) {
            y[pos++] = x[i2++];
        } else if (i2 > dr) {
            y[pos++] = x[i1++];
        } else {
            if (x[i1] < x[i2])
                y[pos++] = x[i1++];
            else
                y[pos++] = x[i2++];
        }
    }
    for (int i = st; i <= dr; ++i)
        x[i] = y[i];
}

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> x[i];
    smart_sort(1, n);
    for (int i = 1; i <= n; ++i)
        cout << x[i] << " ";
}