Pagini recente » Cod sursa (job #2168013) | Cod sursa (job #119415) | Cod sursa (job #2970263) | Cod sursa (job #158901) | Cod sursa (job #643841)
Cod sursa(job #643841)
#include<stdio.h>
#include<vector>
#define Nmax 500010
using namespace std ;
vector<int> Count[10];
int V[Nmax], V_cpy[Nmax], pos[Nmax], N, i ;
void lsd_radix_sort ()
{
int nenul = 1, i, n ;
vector<int> :: iterator it ;
while( nenul )
{
nenul = 0 ;
for( i = 1 ; i <= N ; i++ )
{
Count[ V_cpy[ pos[i] ] % 10 ].push_back(pos[i]) ;
V_cpy[ pos[i] ] /= 10 ;
if ( V_cpy[ pos[i] ] ) nenul = 1 ;
}
for( i = n = 0 ; i < 10 ; i++ )
for( it = Count[i].begin() ; it != Count[i].end() ; it++ )
pos[++n] = (*it) ;
for( i = 0 ; i < 10 ; i++ )
Count[i].clear();
}
}
int main ()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for( i = 1 ; i <= N ; i++ )
{
scanf("%d",&V[i]);
V_cpy[i] = V[i] ;
pos[i] = i ;
}
lsd_radix_sort();
for( i = 1 ; i <= N ; i++ )
printf("%d ",V[pos[i]]);
return 0 ;
}