Cod sursa(job #1379825)

Utilizator cosmin.pascaruPascaru Cosmin cosmin.pascaru Data 6 martie 2015 19:43:20
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <cstring>

#define NMAX 500005

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int v[NMAX], a[NMAX];

void mergesort(int st, int dr);
int main()
{
    int n;
    fin >> n;
    for (int i = 0; i < n; ++i)
        fin >> v[i];

    mergesort(0, n - 1);

    for (int i = 0; i < n; ++i)
        fout << v[i] << ' ';
    fout << '\n';

    return 0;
}
void mergesort(int st, int dr)
{
    if (st >= dr) return;
    if (st == dr - 1)
    {
        if (v[st] > v[dr]) swap(v[st], v[dr]);
        return;
    }
    int mij = st + ((dr - st) >> 1);

    mergesort(st, mij);
    mergesort(mij + 1, dr);

    int i = st, j = mij + 1, k = -1;
    while(i <= mij && j <= dr)
    {
        if (v[i] < v[j]) a[++k] = v[i++];
        else a[++k] = v[j++];
    }
    if (i <= mij) memcpy(a + k + 1, v + i, mij - i + 1);
    else if (j <= dr) memcpy(a + k + 1, v + j, dr - j + 1);
    memcpy(v + st, a, (dr - st + 1) * sizeof(int));
}