Cod sursa(job #631540)

Utilizator PopaStefanPopa Stefan PopaStefan Data 8 noiembrie 2011 15:04:01
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<stdio.h>
#define nmax 50000

unsigned int n;
unsigned int a[nmax];

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

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

void interclasare(unsigned int st,unsigned int mijl,unsigned int dr)
{
    unsigned int b[nmax],i,j,nr;
    for(i=st,nr=0,j=mijl+1;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];
        nr++;i++;
    }
    while(j<=dr)
    {
        b[nr]=a[j];
        nr++;j++;
    }
    for(i=st;i<=dr;i++)
      a[i]=b[i-st];
}

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

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