Cod sursa(job #330753)

Utilizator freak93Adrian Budau freak93 Data 11 iulie 2009 14:37:55
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<stdio.h>
#include<string.h>
#define N_MAX 500005
int a[N_MAX],b[N_MAX];
void rad(int *a,int *b,int byte,int n)
{ int i,count[2048],ind[2048];
  memset(count,0,sizeof(count));
  for(i=1;i<=n;++i) ++count[(a[i]>>byte)&2047];
  ind[0]=1;
  for(i=1;i<2048;++i) ind[i]=ind[i-1]+count[i-1];
  for(i=1;i<=n;++i) b[ind[(a[i]>>byte)&2047]++]=a[i];
}
void radix(int *a,int n)
{ rad(a,b,0,n);
  rad(b,a,11,n);
  rad(a,b,22,n);
}
int i,n;
int main()
{ freopen("algsort.in","r",stdin);
  freopen("algsort.out","w",stdout);
  scanf("%d",&n);
  for(i=1;i<=n;++i) scanf("%d",&a[i]);
  radix(a,n);
  for(i=1;i<=n;++i) printf("%d ",b[i]);
  fclose(stdin);
  fclose(stdout);
  return 0;
}