Cod sursa(job #2049093)

Utilizator MaligMamaliga cu smantana Malig Data 26 octombrie 2017 20:46:32
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");

#define ll long long
#define ull unsigned long long
#define pb push_back
#define mp make_pair
const int NMax = 1e7 + 5;
const int inf = 1e9 + 5;

int N;
int v[NMax];

void radixSort(int,int);

int main() {
    in>>N;
    for (int i=1;i <= N;++i) {
        in>>v[i];
    }

    int pw = 1;
    for (int i=1;i <= 10;++i) {
        radixSort(i,pw);
        pw *= 10;
    }

    for (int i=1;i <= N;++i) {
        out<<v[i]<<' ';
    }

    in.close();out.close();
    return 0;
}

void radixSort(int pos,int pw) {
    queue<int> Q[10 + 5];

    for (int i=1;i <= N;++i) {
        int digit = v[i]/pw % 10;
        Q[digit].push(v[i]);
    }

    int dim = 0;
    for (int i=0;i <= 9;++i) {
        while (Q[i].size()) {
            v[++dim] = Q[i].front();
            Q[i].pop();
        }
    }
}