Cod sursa(job #1387117)

Utilizator mariapascuMaria Pascu mariapascu Data 13 martie 2015 18:26:24
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;

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

int n, a[500008], t[500008];

void Sortare(int st, int dr);
void Interclasare(int st, int mij, int dr);

int main()
{
    fin >> n;
    for ( int i = 1; i <= n; i++ )
        fin >> a[i];
    Sortare(1, n);
    for ( int i = 1; i <= n; i++ )
        fout << a[i] << ' ';

    return 0;
}

void Sortare(int st, int dr)
{
    if ( st >= dr ) return;
    int mij = (st + dr)/2;
    Sortare(st, mij);
    Sortare(mij + 1, dr);
    Interclasare(st, mij, dr);
}

void Interclasare(int st, int mij, int dr)
{
    int p = 0;
    int i = st;
    int j = mij + 1;
    while ( i <= mij && j <= dr)
        if ( a[i] < a[j] )
            t[++p] = a[i++];
        else
            t[++p] = a[j++];
    while ( i <= mij )
        t[++p] = a[i++];
    while ( j <= dr )
        t[++p] = a[j++];
    for ( int i = 1, j = st; i <= p; i++, j++ )
        a[j] = t[i];
}