Cod sursa(job #660862)

Utilizator Ifm-6Ilie Madalina Ifm-6 Data 13 ianuarie 2012 14:04:55
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<stdio.h>
#include<fstream.h>

FILE *f,*g;

int a[500001],n;
void sort(int p, int q, int a[500001])
{ int m;
if (a[p]>a[q]) {
               m=a[p];
               a[p]=a[q];
               a[q]=m;}
}
void intercl(int p, int q, int m, int a[500001])
{ int b[500001], i,j,k;
i=p; j=m+1; k=1;
while (i<=m && j<=q)
   if (a[i]<=a[j])
     {b[k]=a[i];
     i=i+1;
     k=k+1;
     }
     else
     {b[k]=a[j];
     j=j+1;
     k=k+1;}
     if (i<=m) 
        for (j=i;j<=m;j++)
          {b[k]=a[j];
          k=k+1;}
          else
          for (i=j;i<=q;i++)
          {b[k]=a[i];
          k=k+1;
          }
     k=1;
     for (i=p;i<=q;i++)
     {a[i]=b[k];
     k=k+1;}
}
void div (int p, int q, int a[500001])
{int m;
if ((q-p)<=1) sort (p,q,a);
  else
   {m=(p+q)/2;
   div(p,m,a);
   div(m+1,q,a);
   intercl(p,q,m,a); }
}
int main()
{int i;
f=fopen("algsort.in", "r");
g=fopen("algsort.out", "w");
fscanf(f,"%d", &n);
for (i=1;i<=n;i++)
{ fscanf(f,"%d ",&a[i]);
}
div(1,n,a);
for (i=1;i<=n;i++)
  fprintf(g,"%d ", a[i]);
}