Cod sursa(job #1182587)

Utilizator flore77Simion Florentin flore77 Data 6 mai 2014 20:59:18
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

int main() {
    ifstream in;
    in.open("radixsort.in");
    ofstream out;
    out.open("radixsort.out");
    int n, A, B, C, max, c = 0, i ,j, k, m = 1;
    queue<int> q[10];
    in >> n >> A >> B >> C;
    int *v = new int[n];
    v[0] = B;
    max = v[0];
    for (i = 1; i < n; i++) {
        v[i] = (A * v[i-1] + B) % C;
        if (v[i] > max)
            max = v[i];
    }
    while (max != 0) {
        max = max / 10;
        c++;
    }
    for (i = 0; i < c; i++) {
        for (j = 0; j < n; j++)
            q[(v[j]/m)%10].push(v[j]);
        k = 0;
        for (j = 0; j < 10; j++) {
            while (q[j].empty() != 1) {
                v[k] = q[j].front();
                q[j].pop();
                k++;
            }
        }
        m = m * 10;
    }
    for (i = 0; i < n; i = i + 10)
        out << v[i] << " ";
    in.close();
    out.close();
    return 0;
}