Pagini recente » Monitorul de evaluare | Cod sursa (job #2458714) | Monitorul de evaluare | Cod sursa (job #2282989) | Cod sursa (job #1345543)
#include <fstream>
using namespace std;
void radixSort(int v[], int N);
void countSort(int v[], int i, int N);
int main()
{
int N, A, B, C;
ifstream f("radixsort.in");
f >> N >> A >> B >> C;
f.close();
int v[N + 1], i;
v[1] = B;
for (i = 2; i <= N; i++)
v[i] = (A * v[i - 1] + B) % C;
radixSort(v, N);
ofstream g("radixsort.out");
for (i = 1; i <= N; i += 10)
g << v[i] << " ";
g.close();
return 0;
}
void radixSort(int v[], int N)
{
int i;
for (i = 0; i < 4; i++)
countSort(v, i, N);
}
void countSort(int v[], int byteNr, int N)
{
int filter = 255;
int countArr[256] = {};
int output[N + 1];
int i;
for (i = 1; i <= N; i++)
countArr[(v[i] >> (8 * byteNr)) & filter]++;
for (i = 1; i <= 255; i++)
countArr[i] += countArr[i - 1];
for (i = N; i >= 1; i--)
{
output[countArr[(v[i] >> (8 * byteNr)) & filter]] = v[i];
countArr[(v[i] >> (8 * byteNr)) & filter]--;
}
for (i = 1; i <= N; i++)
v[i] = output[i];
}