Cod sursa(job #1421534)

Utilizator TheNechizFMI Razvan Birisan TheNechiz Data 19 aprilie 2015 12:05:12
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.31 kb
# include <stdio.h>
# define InFile "algsort.in"
# define OutFile "algsort.out"
# define dim 500000

int a[dim],b[dim],N;

void interclasare( int i, int j, int k )
{
    /* a[i],a[i+1],..,a[k]
       a[k+1],..,a[j] */
    int i1,j1,t;

    i1 = i;
    j1 = k+1;
    t = 0;

    while( i1 <= k && j1 <= j )
    {
        if( a[i1] <= a[j1] )
            b[t] = a[i1++];
        else
            b[t] = a[j1++];
        ++t;
    }

    for( ; i1 <= k ; ++i1 )
        b[t++] = a[i1];
    for( ; j1 <= j ; ++j1 )
        b[t++] = a[j1];

    for( i1 = 0 ; i1 < t ; ++i1 )
        a[i+i1] = b[i1];
}

void ordonare(int i, int j)
{
    int aux;
    if( j != i )
    {
        if( j-i == 1)
        {
            if(a[i] > a[j] )
            {
                aux = a[i];
                a[i] = a[j];
                a[j] = aux;
            }
        }
        else
        {
            ordonare(i, (i+j)/2 );
            ordonare( (i+j)/2+1 ,j);
            interclasare(i,j, (i+j)/2);
        }
    }

}

int main()
{
    freopen(InFile,"r",stdin);
    freopen(OutFile,"w",stdout);

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

    ordonare(0,N-1);

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

    return 0;
}