Cod sursa(job #3206263)

Utilizator Alex_BerbescuBerbescu Alexandru Alex_Berbescu Data 22 februarie 2024 09:33:30
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
#define dim 1000005
using namespace std;
int v[dim], copiere[dim];
int updatemax(int n)
{
    int maxi = INT_MIN;
    for(int i = 0; i < n; ++i)
    {
        maxi = max(v[i], maxi);
    }
    return maxi;
}
void countu(int n, int exponent)
{
    int fr[10] = {0};
    for(int i = 0; i < n; ++i)
    {
        fr[(v[i] / exponent) % 10]++;
    }
    for(int i = 1; i <= 9; ++i)
    {
        fr[i] += fr[i - 1];
    }
    for(int i = n - 1; i >= 0; --i)
    {
        copiere[fr[(v[i] / exponent) % 10] - 1] = v[i];
        fr[(v[i] / exponent) % 10]--;
    }
    for(int i = 0; i < n; ++i)
    {
        v[i] = copiere[i];
    }
}
void radix(int n)
{
    int m = updatemax(n);
    for(int exponent = 1;  m / exponent > 0; exponent *= 10)
    {
        countu(n,exponent);
    }
}
int n;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int main()
{
    fin >> n;
    for(int i = 0; i < n; ++i)
    {
        fin >> v[i];
    }
    radix(n);
    for(int i = 0; i < n; ++i)
    {
        fout << v[i] << " ";
    }
    return 0;
}