Pagini recente » Cod sursa (job #3177170) | Cod sursa (job #2378356) | Cod sursa (job #2850259) | Cod sursa (job #1443706) | Cod sursa (job #2618503)
#include <iostream>
#include <fstream>
#include <vector>
void RadixSort(std::vector<int> &v, int baza)
{
std::vector<int> bucket(v.size(),0);
int mmax=0, pozitie=1;
for(int i=0;i<v.size();i++)
{
if(v[i]>mmax)
mmax = v[i];
}
while(mmax/pozitie>0)
{
int digitCount[baza] = {0};
for(int i=0;i<v.size();i++)
digitCount[v[i]/pozitie%10]++;
for (int i=1;i<baza;i++)
digitCount[i]+=digitCount[i-1];
for(int i=v.size()-1;i>=0;i--)
{
bucket[digitCount[v[i]/pozitie%10]-1]=v[i];
digitCount[v[i]/pozitie%10]--;
}
for(int i=0;i<v.size();i++)
v[i]=bucket[i];
pozitie*=10;
}
}
int main()
{
std::ifstream f("radixsort.in");
std::ofstream g("radixsort.out");
int N,A,B,C;
f>>N>>A>>B>>C;
std::vector<int> v(N);
v[0]=B;
for(int i=1;i<N;i++)
{
v[i] = (A * v[i-1] + B) % C;
}
RadixSort(v,10);
for(int i=0;i<N;i+=10)
{
g<<v[i]<<'\t';
}
f.close();
g.close();
return 0;
}