Cod sursa(job #720648)

Utilizator raluca_vacaruVacaru Raluca-Ioana raluca_vacaru Data 22 martie 2012 20:04:16
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <cstring>
using namespace std ;

int n ;
long long a[2][500000] ;
bool ok = 1 ;

void radix ( ) {
	int i, p=1, r;
	int nr[10], v[10] ;
	v[0]=0;
	while ( v[0] < n ) {
		//calculam vectorul nr
		memset ( nr, 0, 10*sizeof(int) ) ;
		for ( i=1; i<=n; ++i )
			++nr[a[ok][i]/p%10] ;
		//calucam vectorul v
		memset ( v, 0, 10*sizeof(int) ) ;
		v[0]=1;
		for ( i=1; i<10; ++i )
			v[i] = nr[i-1]+v[i-1] ;
		//aranjam elementele
		for ( i=1; i<=n; ++i) {
			r = a[ok][i]/p%10;
			a[!ok][v[r]++] = a[ok][i];
		}
		p *= 10;
		ok = !ok; 
	}
}

int main() {
	freopen ( "algsort.in", "r", stdin );
	scanf ( "%d", &n );
	int i;
	for ( i=1; i<=n; ++i )
		scanf ( "%I64d ", &a[1][i] );
	fclose (stdin);
	radix();
	freopen ( "algsort.out", "w", stdout );
	for ( i=1; i<n; ++i )
		printf ( "%I64d ", a[ok][i] ) ;
	printf ( "%I64d", a[ok][n] ) ;
	printf ( "\n" ) ;
	fclose ( stdout ) ;
	return 0;
}