Cod sursa(job #656472)

Utilizator fenrigasdFc dd2 fenrig Data 4 ianuarie 2012 17:38:32
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>

int n , v[500005];

void create()
{
    freopen("algsort.in","r",stdin);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
     scanf("%d",&v[i]);
}

void merge(int s, int d)
{
    int i=s,j=(s+d)/2+1,k=1,a[500005];
     while(i<=(s+d)/2 && j<=d)
      {
          if(v[i]>v[j]){a[k]=v[j];j++;}
           else {a[k]=v[i];i++;}
        k++;
      }
      if(i<=(s+d)/2)
        while(i<=(s+d)/2)
          {
              a[k]=v[i];k++;i++;
          }
      else
         while(j<=d)
         {
             a[k]=v[j];k++;j++;
         }
     for(k=1,i=s;i<=d;k++,i++)
       v[i]=a[k];
}
void mergesort(int p , int q)
{
    if(p<q)
    {
        mergesort(p,(p+q)/2);
        mergesort((p+q)/2+1,q);
        merge(p,q);

    }
}
void write()
{
     freopen("algsort.out","w",stdout);
     for(int i=1;i<=n;i++)
      printf("%d ",v[i]);
}
int main()
{
    create();
    mergesort(1,n);
    write();

}