Cod sursa(job #660903)

Utilizator Ifm-6Ilie Madalina Ifm-6 Data 13 ianuarie 2012 14:31:16
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<stdio.h>

int a[500001],b[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++;
     k++;
     }
     else
     {b[k]=a[j];
     j++;
     k++;}
     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;
     for (i=p;i<=q;i++)
     {a[i]=b[k];
     k++;}
}
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;
FILE* f=fopen("algsort.in", "r");
fscanf(f,"%d\n", &n);
for (i=1;i<=n;i++)
     fscanf(f,"%d",&a[i]);
fclose(f); 
div(1,n,a);
FILE* g=fopen("algsort.out", "w+");
for (i=1;i<=n;i++)
  fprintf(g,"%d ", a[i]);
  fprintf(g,"\n");
fclose(g);  
return 0;
}