Pagini recente » Cod sursa (job #1497694) | Cod sursa (job #3302465) | Cod sursa (job #150594) | Cod sursa (job #2449966) | Cod sursa (job #1827624)
#include <fstream>
#define MaxN 500005
#define MaxD 10000
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int fr[MaxD],v[MaxN],aux[MaxN],N,Max=0,Log;
void Sort()
{
int Div=1,Size=1;
Log=0;
while(Size<Max)
Log++,Size*=MaxD;//ma uit sa vad de cate ori trebuie sa fac o operatie
for(int i=1;i<=Log;i++)
{
for(int i=0;i<MaxD;i++)
fr[i]=0;
for(int i=1;i<=N;i++)
fr[(v[i]/Div)%MaxD]++;
for(int i=1;i<MaxD;i++)
fr[i]+=fr[i-1];
for(int i=N;i>0;i--)
{
aux[fr[(v[i]/Div)%MaxD]]=v[i];
fr[(v[i]/Div)%MaxD]--;
}
for(int i=1;i<=N;i++)
v[i]=aux[i];
Div*=MaxD;
}
}
int main()
{
cin>>N;
for(int i=1;i<=N;i++)
{
cin>>v[i];
if(Max<v[i])
Max=v[i];
}
Sort();
for(int i=1;i<=N;i++)
cout<<v[i]<<" ";
return 0;
}