Cod sursa(job #826726)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 1 decembrie 2012 10:20:11
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<stdio.h>

#define maxn 500005

FILE*f=fopen("algsort.in","r");
FILE*g=fopen("algsort.out","w");

const int base = 1023,pbase = 10;
int n,A[maxn],AUX[maxn],count[base];

inline void radix ( int *A ){
	
	int step = 0;
	for ( int pasi = 1 ; pasi <= 4; ++pasi ){
		
		for ( int i = 1 ; i <= n ; ++i ){
			++count[ (A[i]>>step)&base ];
		}
		for ( int i = 0 ; i <= base ; ++i ){
			count[i] += count[i-1];
		}
		
		for ( int i = n ; i >= 1 ; --i ){
			int last = ((A[i]>>step)&base);
			AUX[ count[last]-- ] = A[i];
		}
		
		step += pbase;
		for ( int i = 1 ; i <= n ; ++i ){
			A[i] = AUX[i];
		}
		for ( int i = 0 ; i <= base ; ++i ){
			count[i] = 0;
		}
	}
}

int main () {
	
	fscanf(f,"%d",&n);
	for ( int i = 1 ; i <= n ; ++i ){
		fscanf(f,"%d",&A[i]);
	}
	
	radix(A);
	
	for ( int i = 1 ; i <= n ; ++i ){
		fprintf(g,"%d ",A[i]);
	}
	fprintf(g,"\n");
	
	fclose(f);
	fclose(g);
	
	return 0;
}