Cod sursa(job #2451161)

Utilizator uvIanisUrsu Ianis Vlad uvIanis Data 25 august 2019 22:55:28
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;

size_t v[500001], N;

vector<vector<size_t>> buckets(10, vector<size_t>());

ifstream fin("algsort.in");
ofstream fout("algsort.out");


int main()
{
    fin >> N;

    fin >> v[1];

    size_t MAX{v[1]};

    for(size_t i = 2; i <= N; i++)
    {
        fin >> v[i];
        MAX = max(MAX, v[i]);
    }

    size_t nr{0};
    while(MAX)
    {
        nr++;
        MAX /= 10;
    }

    for(size_t c = 0; c < nr; c++)
    {
       for(size_t i = 1; i <= N; i++)
       {
           size_t copy_c = c;
           size_t copy_v = v[i];

           while(copy_c && copy_v){
                copy_v /= 10;
                copy_c --;
           }

           buckets[copy_v%10].push_back(v[i]);
       }

       size_t line = 0;
       size_t column = 0;
       for(size_t i = 1; i <= N; i++)
       {
           if(column == buckets[line].size())
           {
               column = 0;
               line++;
               while(buckets[line].size() == 0) line++;
           }

           v[i] = buckets[line][column];
           column++;
       }

       for(size_t i = 0; i < 10; i++) buckets[i].clear();
    }

    for(size_t i = 1; i <= N; i++) fout << v[i] << " ";
}