Cod sursa(job #659037)

Utilizator AnaTudorTudor Ana Maria Mihaela AnaTudor Data 9 ianuarie 2012 22:26:22
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdlib.h>
#include <stdio.h>
# define MAX 500001
using namespace std;
int a[MAX],n;


void interclasare(int s,int d,int m)
{ int i,j,k,c[MAX];
i=s;
j=m+1;
k=0;
 while(i<=m && j<=d)
   if (a[i]<a[j])
       { k++;  c[k]=a[i];  i++;}
       else
       { k++; c[k]=a[j];  j++;}
  if (i<=m )
      while (i<=m)
      { k++; c[k]=a[i]; i++;}
      else
         if (j<=d)
            while (j<=d)
              { k++; c[k]=a[j]; j++; }
k=0;
for(i=s;i<=d;i++)
{k++;
a[i]=c[k];  }
   }

void divimp(int s,int d)
{ int m;
if (s<d)
  {  m=(s+d)/2;
     divimp(1,m);
     divimp(m+1,d);
     interclasare(s,d,m);
   }
}




int main()
{int i;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf ("%d",&n);
for(i=1;i<=n;i++)
  scanf("%d",&a[i]);

   divimp(1,n);
   for(i=1;i<=n;i++)
     printf("%d ",a[i]);

   return 0;
}