Cod sursa(job #559003)

Utilizator tm_raduToma Radu tm_radu Data 17 martie 2011 15:51:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;

int a[500001];
int aux[500001];
int n, i, j;

void MergeSort(int st, int dr);

int main()
{
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    fin >> n;
    for ( i = 1; i <= n; i++ )
        fin >> a[i];
    
    MergeSort(1, n);
    for (int i = 1; i < n; i++ )
        fout << a[i] << " ";
    fout << a[n] << "\n";
    return 0;
}

void MergeSort(int st, int dr)
{
     if ( st == dr ) return;
     int mid = st + (dr-st)/2;
     MergeSort(st, mid), MergeSort(mid+1, dr);
     int v1 = st, v2 = mid+1, v = st;
     while ( v1 <= mid || v2 <= dr )
     {
           if ( v1 <= mid && (v2 > dr || a[v1] < a[v2]) ) aux[v] = a[v1], v++, v1++;
           else                                           aux[v] = a[v2], v++, v2++;
     }
     for ( i = st; i <= dr; i++ )
         a[i] = aux[i];
}