Pagini recente » Cod sursa (job #707986) | Cod sursa (job #2300805) | Cod sursa (job #2037530) | Cod sursa (job #3137) | Cod sursa (job #2540564)
#include <fstream>
#define dim 10000010
using namespace std;
int a[2][dim];
int f[270];
int i,n,p,k,A,B,C;
int OctetulP (int x) {
int nr=x;
for (int i=1;i<p;i++) {
nr/=256;
}
return nr%256;
}
void stergere() {
for (int i=0;i<256;i++) {
f[i]=0;
}
}
void sumaPartiala() {
for (int i=1;i<256;i++) {
f[i]+=f[i-1];
}
}
void sortare (int a[],int b[]) {
for (int i=1;i<=n;i++) {
f[OctetulP(a[i])]++;
}
sumaPartiala();
for (int i=n;i>=1;i--) {
b[f[OctetulP(a[i])]]=a[i];
f[OctetulP(a[i])]--;
}
}
int main() {
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
fin>>n>>A>>B>>C; ///nr%256(2^8)=valoarea reprezentata de ultimul octet al numarului
a[k][1]=B; ///nr/256=numarul fara ultimul octet
for (i=2;i<=n;i++) {
a[k][i]=(A*a[k][i-1]+B)%C;
}
// fout<<19514%256<<"\n";
// fout<<19514/256;
k=0;
for (p=1;p<=4;p++) {
sortare(a[k],a[1-k]);
stergere();
k=1-k;
}
for(i=1;i<=n;i+=10) {
fout<<a[1-k][i]<<" ";
}
return 0;
}