Pagini recente » Cod sursa (job #2529470) | Cod sursa (job #1965746) | Cod sursa (job #1820944) | Cod sursa (job #2137355) | Cod sursa (job #1259271)
#include <fstream>
#include <math.h>
using namespace std;
void radixSort(int a[], int N, int currentDigit);
int main()
{
int N, A, B, C;
ifstream f("radixsort.in");
f >> N >> A >> B >> C;
f.close();
int a[N], i;
int maxDigits = 0, digits;
a[0] = B;
for (i = 1; i < N; i++)
{
a[i] = (A * a[i - 1] + B) % C;
digits = log10(a[i]) + 1;
if (digits > maxDigits)
maxDigits = digits;
}
for (i = 1; i <= maxDigits; i++)
radixSort(a, N, i);
ofstream g("radixsort.out");
for (i = 0; i < N; i += 10)
g << a[i] << " ";
g.close();
return 0;
}
void radixSort(int a[], int N, int currentDigit)
{
int i, j;
int count[10] = {};
int output[N];
int zeroes = 1;
for (i = 1; i < currentDigit; i++)
zeroes *= 10;
for (i = 0; i < N; i++)
count[(a[i] / zeroes) % 10]++;
for (j = 1; j <= 9; j++)
count[j] += count[j - 1];
int digit;
for (i = N - 1; i >= 0; i--)
{
digit = (a[i] / zeroes) % 10;
output[count[digit] - 1] = a[i];
count[digit]--;
}
for (i = 0; i < N; i++)
a[i] = output[i];
}