Cod sursa(job #584412)

Utilizator stef93Stefan Gilca stef93 Data 25 aprilie 2011 14:34:25
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void radix (int byte, long N, long *source, long *dest)
{
     int i;
  long count[256];
  long index[256];
  memset (count, 0, sizeof (count));
  for ( int i=0; i<N; i++ ) count[((source[i])>>(byte*8))&0xff]++;

  index[0]=0;
  for ( i=1; i<256; i++ ) index[i]=index[i-1]+count[i-1];
  for ( i=0; i<N; i++ ) dest[index[((source[i])>>(byte*8))&0xff]++] = source[i];
}

void radixsort (long *source, long *temp, long N)
{
  radix (0, N, source, temp);
  radix (1, N, temp, source);
  radix (2, N, source, temp);
  radix (3, N, temp, source);
}


long data[500003];
long temp[500003];

int main (void)
{
    int n;
  freopen("algsort.in","r",stdin);
  freopen("algsort.out","w",stdout);
  scanf("%d",&n);
  for(int i=0;i<n;i++)scanf("%d",&data[i]);
  radixsort (data, temp, n);
  for ( int i=0; i<n; i++ ) printf("%d ",data[i]);
  return 0;
}