Cod sursa(job #1103951)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 10 februarie 2014 10:34:10
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;

const int NMax = 500010;

int n;
int a[NMax];
int aux[NMax];

inline void MergeSort(const int st, const int dr)
{
    if (dr - st + 1 == 1)
        return;
    if (dr - st + 1 == 2)
    {
        if (a[st] > a[dr])
            swap(a[st], a[dr]);
        return ;
    }
    int mij = (st+dr) >> 1;
    MergeSort(st, mij);
    MergeSort(mij+1, dr);
    int i = st, j = mij + 1;
    int ind = 0;
    while (i <= mij && j <= dr)
        if (a[i] < a[j])
            aux[++ind] = a[i++];
        else
            aux[++ind] = a[j++];
    while (i <= mij)
        aux[++ind] = a[i++];
    while (j <= dr)
        aux[++ind] = a[j++];
    for (i = st, j = 1; i <= dr; ++i, ++j)
        a[i] = aux[j];

}

int main()
{
    ifstream f ("algsort.in");
    f>>n;
    for (int i = 1; i<=n; ++i)
        f>>a[i];
    f.close();
    MergeSort(1, n);
    ofstream g ("algsort.out");
    for (int i = 1; i<=n; ++i)
        g<<a[i]<<" ";
    g<<"\n";
    g.close();

    return 0;
}