Cod sursa(job #317653)

Utilizator popoiu.georgeGeorge Popoiu popoiu.george Data 24 mai 2009 18:02:39
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<stdio.h>
using namespace std;

long n,v[500001];

void sort(int p,int q)
{
if(v[p]>v[q]){v[p]^=v[q];v[q]^=v[p];v[p]^=v[q];}
}

void intercl(int li,int ls,int m)
{
long a[500001],i,j,k;
i=li;j=m+1;k=1;
while( (i<=m) && (j<=ls) )
    {
    if(v[i]<=v[j])a[k++]=v[i++];
    else a[k++]=v[j++];
    }
if(i<=m)for(j=i;j<=m;j++)a[k++]=v[j];
else for(i=j;i<=ls;i++)a[k++]=v[i];
k=1;
for(i=li;i<=ls;i++)v[i]=a[k++];
}

void merge(int li,int ls)
{
int m;
if( (ls-li) <=1 ) sort(li,ls);
else
    {
    m=(li+ls)/2;
    merge(li,m);
    merge(m+1,ls);
    intercl(li,ls,m);
    }
}

int main()
{
long i;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)scanf("%ld",&v[i]);
merge(1,n);
for(i=1;i<=n;i++)printf("%ld ",v[i]);
return 0;
}