Pagini recente » Cod sursa (job #2095428) | Cod sursa (job #89631) | Rating Tiberiu C. Turbureanu (tct13) | Cod sursa (job #217437) | Cod sursa (job #1528277)
#include <iostream>
#include <fstream>
#include <string.h>
#include <vector>
using namespace std;
const int nmax = 10000000;
int n,v[nmax],g[nmax];
void read();
void redixSort();
int main()
{
freopen("radixsort.out","w",stdout);
read();
redixSort();
for(int i = 0; i < n; i+=10)
printf("%d ",v[i]);
fclose(stdout);
return 0;
}
#define getByte(t) ((t >>(8*x)) & 0xFF)
void countsort(int a[], int b[], int x) {
int counting[257], indexing[257];
memset(counting,0,4*(257));
int w;
for(int i = 0; i < n; i++){
w = getByte(a[i]);
counting[w]++;
}
indexing[0]=0;
for(int i =1 ; i < 257; i++)
indexing[i] = indexing[i-1] + counting[i-1] ;
for(int i = 0; i<n ; i++)
b[indexing[getByte(a[i])]++] = a[i];
}
void redixSort() {
for ( int i = 0; i < 4 ; i++) { // 32/4 = 8 bit at a time
if (i%2 == 0) countsort(v,g,i);
else countsort(g,v,i);
}
}
void read(){
int a,b,c;
freopen("radixsort.in","r",stdin);
scanf("%d %d %d %d", &n, &a, &b, &c);
v[0] = b % c;
for( int i = 1; i<n; i++)
v[i] = (1LL*a*v[i-1]%c + b) % c;
fclose(stdin);
}