Cod sursa(job #1807511)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 16 noiembrie 2016 17:51:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>
#include <algorithm>
#include <cstring>

#define in "algsort.in"
#define out "algsort.out"
#define NMAX (500000 + 7)

using namespace std;
int n, v[NMAX], aux[NMAX];

void merge(const int &st, const int &mid, const int &dr)
{
    int p1 = st, p2 = mid+1;
    for(int i = st; i<= dr; ++i)
    {
        if(p2 > dr)
        {
            aux[i] = v[p1];
            ++p1;
            continue;
        }
        if(p1 > mid)
        {
            aux[i] = v[p2];
            ++p2;
            continue;
        }
        if(v[p1] < v[p2])
        {
            aux[i] = v[p1];
            ++p1;
            continue;
        }
        aux[i] = v[p2];
        ++p2;
    }
    for(int i = st; i<= dr; ++i) v[i] = aux[i];
}
void sortare(const int &st, const int &dr)
{
    if(st == dr) return ;
    int mij = ((st+dr)>>1);
    sortare(st, mij);
    sortare(mij+1, dr);
    merge(st, mij, dr);
}

int main()
{
    freopen(in, "r", stdin);
    freopen(out, "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i<= n; ++i) scanf("%d ", &v[i]);
    sortare(1, n);
    for(int i = 1; i<= n; ++i) printf("%d ", v[i]);
    printf("\n");
    return 0;
}