Cod sursa(job #248389)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 25 ianuarie 2009 16:48:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include<stdio.h>
#define dim 500001
int n, a[dim], b[dim];

void merge_sort(int l, int r)
{
    int m = (l + r) >> 1, i, j, k;

    if (l == r) return;

    merge_sort(l, m);
    merge_sort(m + 1, r);

    for ( i=l, j=m+1, k=l; i<=m || j<=r; )
	if (j > r || (i <= m && a[i] < a[j]))
	    b[k++] = a[i++];
	else
	    b[k++] = a[j++];

    for (k = l; k <= r; k++)
     a[k] = b[k];
}

int main(void)
{
 freopen("algsort.in","r",stdin);
 freopen("algsort.out","w",stdout);

 scanf( "%d", &n);

 for(register int i = 1; i<=n; ++i)
  scanf( "%d", &a[i]);

 merge_sort( 1, n);

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

  printf("\n");
  fcloseall();
  return 0;
}