Pagini recente » Cod sursa (job #2268041) | Cod sursa (job #524223) | Cod sursa (job #1119208) | Cod sursa (job #1465690) | Cod sursa (job #277938)
Cod sursa(job #277938)
#include<stdio.h>
#include<string.h>//doar pentru functai memeset
#define COUNT_N 256 //65536 pt long long
#define BYTE 8 // 16 pt long long
int a[500000],b[500000],count[COUNT_N],ind[COUNT_N];//long echivalent cu int sub g++
void rad(int *a,int *b,int byte,int n)
{
memset(count,0,sizeof(count));
int i,Lm = COUNT_N - 1;
for(i = 1; i <= n; ++i)
++count[(a[i]>>byte)&Lm];//respectiv for(i=0;i<n;++i) dak vreti sa incepeti de la 0
ind[0] = 1;//se omite dak incepeti de la 0
for(i = 1;i < COUNT_N; ++i)
ind[i] = ind[i-1] + count[i-1];
for(i = 1; i <= n; ++i)
b[ind[(a[i]>>byte)&Lm]++] = a[i];
}
void radix(int *a,int n)
{
rad(a,b, 0,n);
rad(b,a, BYTE,n);
rad(a,b,2*BYTE,n);
rad(b,a,3*BYTE,n);
}
int tablou[500000];
int main(void)
{
int n;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%d",&tablou[i]);
radix(tablou,n);
for(int i = 1; i <= n; i++)
printf("%d ",tablou[i]);
fclose(stdin); fclose(stdout);
return 0;
}