Cod sursa(job #2272300)

Utilizator CristyXtremeSimion Cristian CristyXtreme Data 29 octombrie 2018 22:43:27
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <queue>
#include <vector>
#include <cmath>

using namespace std;

vector <int> numere;
queue <int> cifre[10];

void radix_sort(int cifra) {
    int x, impartiri_nule = 0, exp = pow(10, cifra - 1);
    for (int i = 0; i < numere.size(); i++) {
        x = numere[i]/exp;
        if (!x)
            impartiri_nule++;
        x = x % 10;
        cifre[x].push(numere[i]);
    }
    if (impartiri_nule != numere.size()) {
        numere.clear();
        for (int i = 0; i < 10; i++)
            while (!cifre[i].empty()) {
                numere.push_back(cifre[i].front());
                cifre[i].pop();
            }
        radix_sort(cifra + 1);
    }
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    int n, nr;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &nr);
        numere.push_back(nr);
    }
    radix_sort(1);
    for (int i = 0; i < n; i++)
        printf("%d ", numere[i]);
    return 0;
}