Pagini recente » Cod sursa (job #2861197) | Cod sursa (job #87537) | Cod sursa (job #1883902) | Cod sursa (job #676703) | Cod sursa (job #659855)
Cod sursa(job #659855)
#include <stdio.h>
#include <list>
using namespace std;
int maxim,n,v[500002];
list<int> bucket[100];
void radix(){
int sortat=1;
int digit=1,m=1,m1=1;
while (digit<=1000000000){
for (int i=m;i<=n;i++){
if (v[i]/digit){
sortat=0;
bucket[(v[i]/digit)%100].push_back(v[i]);
}
else v[m++]=v[i];
}
if (sortat) return;
int indice=0;
for (int i=m;i<=n;i++){
while (bucket[indice].empty()){
indice++;
}
v[i]=bucket[indice].front();
bucket[indice].pop_front();
}
digit*=100;
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
maxim=-1;
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d",&v[i]);
if (v[i]>maxim) maxim=v[i];
}
radix();
for (int i=1;i<=n;i++)
printf("%d ",v[i]);
return 0;
}