Cod sursa(job #330752)

Utilizator freak93Adrian Budau freak93 Data 11 iulie 2009 14:37:04
Problema Sortare prin comparare Scor 60
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[1024],ind[1024];
  memset(count,0,sizeof(count));
  for(i=1;i<=n;++i) ++count[(a[i]>>byte)&1023];
  ind[0]=1;
  for(i=1;i<1024;++i) ind[i]=ind[i-1]+count[i-1];
  for(i=1;i<=n;++i) b[ind[(a[i]>>byte)&1023]++]=a[i];
}
void radix(int *a,int n)
{ rad(a,b,0,n);
  rad(b,a,10,n);
  rad(a,b,20,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;
}