Cod sursa(job #498634)

Utilizator MciprianMMciprianM MciprianM Data 5 noiembrie 2010 17:54:06
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

using namespace std;

int a[500000];
int c[500000];


void mergeSort( int a[], const int n ){
    int p;
    int i, j, li, lj,cc;
    for ( p = 1; p < n; p <<= 1 ){
        li = 0;
        lj = 0;
        while( lj + p < n ){
            i = lj;
            j = lj+p;
            li=i+p;
            lj=min(n,j+p);
            cc = 0;
            while ( i < li && j < lj )
                c [ cc ++ ] = a [ i ] < a [ j ] ? a [ i ++ ] : a [ j ++ ];
            while ( i < li )
                c [ cc ++ ] = a [ i ++ ];
            while ( j < lj )
                c [ cc ++ ] = a [ j ++ ];
            j = li - p - 1;
            for ( i = lj - 1; i > j; -- i )
                a [ i ] = c [ -- cc ];
        }
    }
}

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