Cod sursa(job #2077396)

Utilizator karakter98Irimia Robert karakter98 Data 27 noiembrie 2017 23:24:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <string.h>
using namespace std;

FILE* fin;
FILE* fout;

int n;
unsigned int V[500000];
unsigned int result[500000];
unsigned int C[256];
unsigned int O[256];

void radixSort(unsigned int v[], int n, int byte)
{
    for(int i = 0; i < n; ++i)
        C[(v[i] & (0xFF << byte)) >> byte]++;

    for(int i = 1; i < 256; ++i)
        C[i] += C[i - 1];

    for(int i = n - 1; i >= 0; --i)
    {
        result[C[(v[i] & (0xFF << byte)) >> byte] - 1] = v[i];
        C[(v[i] & (0xFF << byte)) >> byte]--;
    }

    memcpy(v, result, sizeof(unsigned int) * n);
    memset(C, 0, sizeof(unsigned int) * 256);
}

int main()
{
    fin = fopen("algsort.in", "r");
    fout = fopen("algsort.out", "w");

    fscanf(fin, "%d", &n);

    for(int i = 0; i < n; ++i)
        fscanf(fin, "%u", V + i);

    for(int i = 0; i <= 24; i += 8)
        radixSort(V, n, i);

    for(int i = 0; i < n; ++i)
        fprintf(fout, "%d ", V[i]);

    return 0;
}