Pagini recente » Cod sursa (job #2524255) | Cod sursa (job #2917495) | Cod sursa (job #2880584) | Cod sursa (job #2365451) | Cod sursa (job #2614765)
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream f;
std::ofstream g;
void radix_sort(int v[], int nr) {
int mask = (1 << 8) - 1;
int pas = 0;
std::vector<int> bucket[256];
int maxi = 0, cifre_max = 0;
for (int i = 0; i < nr; i++) {
if (v[i] > maxi)
maxi = v[i];
}
while (maxi != 0) {
cifre_max++;
maxi >>= 8;
}
for (int k = 0; k < cifre_max; k++) {
for (int i = 0; i < nr; i++)
bucket[(v[i] >> pas) & mask].push_back(v[i]);
nr = 0;
for (int i = 0; i < 256; i++) {
for (int j = 0; j < bucket[i].size(); j++)
v[nr++] = bucket[i][j];
bucket[i].clear();
}
pas += 8;
}
}
int main() {
int n,A,B,C;
f.open("radixsort.in");
g.open("radixsort.out");
f>>n>>A>>B>>C;
int v[n];
f>>v[0];
for(int i=1;i<n;i++)
v[i]=(A* v[i-1] + B) % C;
radix_sort(v,n);
for(int i=0;i<n;i=i+10)
g<<v[i]<<' ';
f.close();
g.close();
return 0;
}