Cod sursa(job #1802480)

Utilizator NarniussAnghelache Bogdan Narniuss Data 10 noiembrie 2016 14:09:16
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#define dim 500001
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int rad[10][dim];
int cif_max(int v[dim], int n)
{
    int i, mx, k;
    mx = k = 0;
    for(i=1 ; i <= n ; i++)
    {
        if(mx < v[i]){
            mx = v[i];
        }
    }

    while(mx){
        ++k;
        mx/=10;
    }

    return k;
}
void radix_sort(int v[dim], int nr_cif_mx, int n)
{
    int i, j, p=1, k=0;
    for(i = 1 ; i <= nr_cif_mx ; i++)
        for(j = 1 ; j <= n ; j++)
    {
        int x = v[j]/p%10;
        rad[x][0]++;
        int y = rad[x][0];
        rad[x][y] = v[j];
    }

    for(i = 0 ; i <= 9 ; i++)
        for(j = 1 ; j <= rad[i][0] ; j++)
        v[++k] = rad[i][j];
    for(i=0 ; i <= 9 ; i++)
        rad[i][0]=0;
    p*=10;
}
int main()
{
    int i, j, n, v[dim];
    f>>n;

    for(i = 1 ; i <= n ; i++)
    {
        f>>v[i];
    }
    int cif = cif_max(v, n);
    radix_sort(v, cif, n);

    for(i = 1 ;i <= n ;i++)
    {
        g << v[i] << " ";
    }

}