Pagini recente » Cod sursa (job #1973585) | Cod sursa (job #1854051) | Cod sursa (job #2325062) | Cod sursa (job #1148253) | Cod sursa (job #659859)
Cod sursa(job #659859)
#include <stdio.h>
#include <list>
#include <vector>
using namespace std;
int maxim,n;
vector<int> v;
list<int> bucket[300];
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)%200].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*=200;
}
}
int main()
{
int x;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
maxim=-1;
scanf("%d",&n);
v.push_back(1);
for (int i=1;i<=n;i++){
scanf("%d",&x);
v.push_back(x);
if (x>maxim) maxim=x;
}
radix();
for (int i=1;i<=n;i++)
printf("%d ",v[i]);
return 0;
}