Cod sursa(job #498723)

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

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;

    freopen( "algsort.in", "r", stdin );
    freopen( "algsort.out", "w", stdout );

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

    mergeSort( a, n );

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