Pagini recente » Cod sursa (job #2042268) | Cod sursa (job #2987233) | Cod sursa (job #1580233) | Cod sursa (job #2714736) | Cod sursa (job #2829067)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int n, numbers[10000001], byte;
#define get_byte(x) ((x>>(byte * 8)) & 0xFF)
void citire(int & n, int numbers[])
{
int a, b, c;
fin >> n >> a >> b >> c;
numbers[0] = b % c;
for(int i = 1; i < n; i++)
numbers[i] = (1LL * a * numbers[i-1] % c + b) % c;
}
void countsort(int A[], int B[], int byte)
{
int counter[256];
int index[256];
/*
for(int i = 0; i < 256; i++)
counter[i] = 0;
*/
memset(counter, 0, sizeof(counter));
for(int i = 0; i < n; i ++)
counter[get_byte(A[i])]++;
index[0] = 0;
for(int i = 1; i < 256; i ++)
index[i] = index[i-1] + counter[i-1];
for(int i = 0; i < n; i ++)
B[index[get_byte(A[i])]++] = A[i];
}
void radixsort()
{
int v[n];
for (int i = 0; i < sizeof(numbers[0]); i++)
if(i % 2 == 0)
countsort(numbers, v, i);
else
countsort(v, numbers, i);
}
void afisare(int n, int numbers[])
{
for(int i = 0; i < n; i += 10)
fout << numbers[i]<< ' ';
fout << '\n';
}
int main()
{
citire(n, numbers);
radixsort();
afisare(n, numbers);
return 0;
}