Cod sursa(job #1542242)

Utilizator rzvrzvNicolescu Razvan rzvrzv Data 5 decembrie 2015 10:41:34
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<cstdio>
#include<cstring>

using namespace std;

int a[500002],i,n,nr[256],ind[256],b[500002];

void radix(int a[],int b[],int x)
{
    int i;
    memset(nr,0,sizeof(nr));
    memset(ind,0,sizeof(ind));
    for(i=1;i<=n;i++)
    {
        nr[(a[i]>>(8*x))&255]++;
    }
    ind[0]=1;
    for(i=1;i<=255;i++)
    {
        ind[i]=ind[i-1]+nr[i-1];
    }
    for(i=1;i<=n;i++)
    {
        b[ind[(a[i]>>(8*x))&255]++]=a[i];
    }
}

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]);
    }
    for(i=0;i<=3;i++)
    {
        if(i%2==0)
        {
            radix(a,b,i);
        }
        else
        {
            radix(b,a,i);
        }
    }
    for(i=1;i<=n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}