Pagini recente » Cod sursa (job #3229224) | Cod sursa (job #1820319) | Cod sursa (job #2211311) | Cod sursa (job #1540973) | Cod sursa (job #1216176)
#include <fstream>
int index[256];
int counter[256];
int getInd(int a, int bytes)
{
return (a >> (bytes * 8)) & 255;
}
void doStuff(int *nArr, int *nBarr, int bytes, int nV)
{
for (int i = 0; i < 256; i++)
{
counter[i] = 0;
}
for (int i = 0; i < nV; i++)
{
++counter[getInd(nArr[i], bytes)];
}
index[0] = 0;
for (int i = 1; i < 256; i++)
{
index[i] = index[i - 1] + counter[i - 1];
}
for (int i = 0; i < nV; i++)
{
nBarr[index[getInd(nArr[i], bytes)]++] = nArr[i];
}
for (int i = 0; i < nV; i++)
{
nArr[i] = nBarr[i];
}
}
void sort(int *nArr, int nV)
{
int *nBarr = new int[nV];
for (int i = 0; i < (int)sizeof(int); i++)
{
doStuff(nArr, nBarr, i, nV);
}
}
int main()
{
std::ifstream in("radixsort.in");
std::ofstream out("radixsort.out");
int nV, a, b, c;
in >> nV >> a >> b >> c;
in.close();
int *nArr = new int[nV];
nArr[0] = b % c;
for (int i = 1; i < nV; i++)
{
nArr[i] = (1LL * a * nArr[i - 1] % c + b) % c;
}
sort(nArr, nV);
for(int i = 0; i < nV; i += 10)
{
out << nArr[i]<< ' ';
}
out.close();
return 0;
}