Pagini recente » Cod sursa (job #1446754) | Cod sursa (job #452268) | Cod sursa (job #2674802) | Cod sursa (job #1491796) | Cod sursa (job #643852)
Cod sursa(job #643852)
#include<stdio.h>
#include<vector>
#define Nmax 500010
using namespace std ;
vector<int> Count[10];
int V[Nmax], pos[Nmax], N, i ;
void lsd_radix_sort ()
{
int nenul = 1, i, n, zece = 1 ;
vector<int> :: iterator it ;
for( ; nenul ; zece *= 10 )
{
nenul = 0 ;
for( i = 1 ; i <= N ; i++ )
{
Count[ ( V[ pos[i] ] / zece ) % 10 ].push_back(pos[i]) ;
if ( V[ pos[i] ] / zece ) nenul = 1 ;
}
for( i = n = 0 ; i < 10 ; i++ )
while( Count[i].size() )
{
pos[++n] = Count[i][0] ;
Count[i].erase(Count[i].begin());
}
}
}
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]);
pos[i] = i ;
}
lsd_radix_sort();
for( i = 1 ; i <= N ; i++ )
printf("%d ",V[pos[i]]);
return 0 ;
}