Pagini recente » Cod sursa (job #888163) | Cod sursa (job #648639) | Cod sursa (job #1463181) | Cod sursa (job #1086067) | Cod sursa (job #2554745)
#include<cstdio>
#include<vector>
#define MAX_BUCKETS 10
#define BASE 10
using namespace std;
vector<int>v;
vector<int>g[MAX_BUCKETS];
int n, a, b, c, maxim;
void readArray() {
FILE* fin = fopen("radixsort.in", "r");
fscanf(fin,"%d%d%d%d",&n, &a, &b, &c);
v.push_back(b);
maxim = b;
for(int i = 1; i < n; i++) {
v.push_back((1LL * a * v[v.size() - 1] + b) % c);
if(v[v.size() - 1] > maxim)
maxim = v[v.size() - 1];
}
fclose(fin);
}
void radixSort() {
int i, exp, m;
for(exp = 1; maxim / exp > 0; exp *= 10) {
for(i = 0; i < v.size(); ++i)
g[(v[i] / exp) % BASE].push_back((v[i]));
m = 0;
for(i = 0; i < BASE; ++i) {
for(int j = 0; j < g[i].size(); ++j)
v[m++] = g[i][j];
}
}
for(i = 0; i <BASE; i++)
{
g[i].clear();
}
}
void writeArray() {
FILE* fout = fopen("radixsort.out", "w");
for(int i = 0; i < v.size(); i += 10)
fprintf(fout,"%d ",v[i]);
fprintf(fout,"\n");
fclose(fout);
}
int main() {
readArray();
radixSort();
writeArray();
return 0;
}