Cod sursa(job #371547)

Utilizator GotenAmza Catalin Goten Data 5 decembrie 2009 19:12:07
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>

using namespace std;

long a[500000];

void ex(long i,long j)
{
 long aux;
 if(a[i]>a[j])
  {
   aux=a[i];
   a[i]=a[j];
   a[j]=aux;
   }
 }

void merge(long i,long j)
{
 long x[500000],k=0,m=(i+j)/2,c;
 long li=i,lj=m+1;
 while(li<=m&&lj<=j)
   if(a[li]<a[lj]) {k++;x[k]=a[li];li++;}
   else {k++; x[k]=a[lj];lj++;}
 if(li<=m)for(c=li;c<=m;c++)x[++k]=a[c];
 else for(c=lj;c<=j;c++)x[++k]=a[c];
 k=1;
 for(c=i;c<=j;c++)
  a[c]=x[k++];
 }

void di(long i,long j)
{
 long m=(i+j)/2;
 if(abs(j-i)<=1)ex(i,j);
 else
  {
   di(i,m);
   di(m+1,j);
   merge(i,j);
   }
 }

int main()
{
 long i,n;
 ifstream f("algsort.in");
 ofstream g("algsort.out");
 f>>n;
 for(i=1;i<=n;i++)f>>a[i];
 di(1,n);
 for(i=1;i<=n;i++)g<<a[i]<<' ';
 return 0;
 }