Cod sursa(job #633758)

Utilizator PopaStefanPopa Stefan PopaStefan Data 14 noiembrie 2011 19:02:02
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<stdio.h>
#define nmax 500001

unsigned int n,a[nmax];

void citire()
{
    freopen("algsort.in","r",stdin);
    scanf("%u",&n);
    unsigned int i;
    for(i=0;i<n;i++)
        scanf("%u",&a[i]);
    fclose(stdin);
}

void afisare()
{
    freopen("algsort.out","w",stdout);
    unsigned int i;
    for(i=0;i<n;i++)
        printf("%u ",a[i]);
    fclose(stdout);
}

void interclaseaza(unsigned int st,unsigned int mijl,unsigned int dr)
{
    unsigned int i,j,nr,b[nmax];
    for(i=st,j=mijl+1,nr=0;i<=mijl && j<=dr;nr++)
        if(a[i]<a[j])
        {
            b[nr]=a[i];
            i++;
        }
        else
        {
            b[nr]=a[j];
            j++;
        }
    while(i<=mijl)
    {
        b[nr]=a[i];
        i++;nr++;
    }
    while(j<=dr)
    {
        b[nr]=a[j];
        j++;nr++;
    }
    for(i=0;i<nr;i++)
        a[st+i]=b[i];
}

void sortare(unsigned int st,unsigned int dr)
{
    if(st<dr)
    {
        unsigned int mijl=(st+dr)/2;
        sortare(st,mijl);
        sortare(mijl+1,dr);
        interclaseaza(st,mijl,dr);
    }
}

int main()
{
    citire();
    if(n>=1)
        sortare(0,n-1);
    afisare();
    return 0;
}