Pagini recente » Cod sursa (job #252362) | Cod sursa (job #1633442) | Cod sursa (job #1775463) | Cod sursa (job #625569) | Cod sursa (job #1754841)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define nmax 500003
ifstream in("radixsort.in");
ofstream out("radixsort.out");
//////////////////////////////
///////////
/////////// LSD Radix sort using countsort for bytes
///////////
//////////////////////////////
#define max_n 10000000+1
int v[max_n],temp[max_n];
const int max_byte = (1<<8)-1;
const int nr_bytes = sizeof(int);
inline int ithbyte(int n,int i)
{
return (n>>(i*8))&max_byte;
}
void byte_numsort(int *A, int *B,int n, int byte_nr)
{
int C[max_byte+1];
for(int i = 0 ; i <= max_byte ; i ++)
C[i] = 0;
for(int i = 0 ; i < n ; i ++)
C[ithbyte(A[i],byte_nr)]++;
for(int i = 1 ; i <= max_byte; i++)
C[i] += C[i-1];
for(int i = 0 ; i < n ; i++)
{
B[C[ithbyte(A[i],byte_nr)]-1] = A[i];
C[ithbyte(A[i],byte_nr)]++;
}
}
void LDS_byte_radixsort(int *v, int n)
{
for(int i = 0 ; i< nr_bytes ; i++)
{
byte_numsort(v,temp,n,i);
for(int j = 0 ; j < n ; j++)
v[j] = temp[j];
}
}
void radixsort()
{
int n,a,b,c;
in >> 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;
LDS_byte_radixsort(v,n);
for(int i = 0 ; i < n ; i +=11)
out << v[i] << " ";
}
int main()
{
radixsort();
return 0;
}