Cod sursa(job #498729)

Utilizator MciprianMMciprianM MciprianM Data 5 noiembrie 2010 20:44:16
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <algorithm>

using namespace std;

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


int * mergeSort( const int n ){
    int p;
    int i, j, li, lj,cc(0);
    int *ap, *cp;
    ap=a;cp=c;
    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);
            while ( i < li || j < lj )
                cp [ cc ++ ] = ( ( j == lj ) || ( i < li && ap [ i ] < ap [ j ] ) ) ? ap [ i ++ ] : ap [ j ++ ];
            /*j = li - p - 1;
            for ( i = lj - 1; i > j; -- i )
                a [ i ] = c [ -- cc ];*/
        }
        for ( i = lj; i < n; ++ i )
            cp [ i ] = ap [ i ];
        swap(ap,cp);
        cc=0;
    }
    return ap;
}

int main(){
    int i,n;
    int *p;
    freopen( "algsort.in", "r", stdin );
    freopen( "algsort.out", "w", stdout );

    scanf( "%d", &n );
    for( i = 0; i < n; i++ )
        scanf( "%d", a+i );

    p = mergeSort( n );

    for( i = 0; i < n; i++ )
        printf( "%d ", p[i] );
    return 0;
}