Pagini recente » Rating Petre Ionut (PetreIonut) | Cod sursa (job #2482715) | Cod sursa (job #479656) | Cod sursa (job #872406) | Cod sursa (job #1316701)
#include <fstream>
#include <queue>
using namespace std;
#define LIM_MAX 10000005
long N, A, B, C;
long Max;
long exp;
long i, j;
long vect[LIM_MAX];
queue<long> myQueue[10];
void readData()
{
ifstream in("radixsort.in");
in >> N >> A >> B >> C;
in.close();
Max = vect[1] = B;
for (i = 2; i <= N; ++i)
{
vect[i] = (A * vect[i - 1] + B) % C;
if (vect[i] > Max)
Max = vect[i];
}
}
void printData()
{
ofstream out("radixsort.out");
for (i = 1; i <= N; i += 10)
out << vect[i] << " ";
out.close();
}
void radixSort()
{
for (exp = 1; Max / exp > 0; exp *= 10)
{
for (i = 1; i <= N; ++i)
myQueue[(vect[i] / exp) % 10].push(vect[i]);
for (i = 0, j = 1; i <= 9; ++i)
while (!myQueue[i].empty())
{
vect[j++] = myQueue[i].front();
myQueue[i].pop();
}
}
}
int main()
{
readData();
radixSort();
printData();
return 0;
}