Cod sursa(job #1841301)

Utilizator stefanmereutaStefan Mereuta stefanmereuta Data 5 ianuarie 2017 15:06:58
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
//radix sort
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

#define MAX 500000

void radix(int v[], int N, int cifmax) {
    queue<int> q[10];
    int p = 1;

    for (int i = 0; i <= cifmax; i++) {
        for (int j = 0; j < N; j++) {
            q[(v[j] / p) % 10].push(v[j]);
        }

        for (int j = 0, cif = 0; cif < 10; cif++) {
            while (!q[cif].empty()) {
                v[j] = q[cif].front();
                q[cif].pop();
                j++;
            }
        }

        p *= 10;
    }
}

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

    int N, v[MAX], cifmax = 0, putmax = 1;

    fin >> N;

    for (int i = 0; i < N; i++) {
        fin >> v[i];

        while (v[i] / 10 >= putmax) {
            cifmax++;
            putmax *= 10;
        }
    }

    radix(v, N, cifmax);

    for (int i = 0; i < N; i++) {
        fout << v[i] << " ";
    }

    fin.close();
    fout.close();

    return 0;
}