Cod sursa(job #643852)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 4 decembrie 2011 15:44:43
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#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 ; 
}