Pagini recente » Cod sursa (job #97482) | Borderou de evaluare (job #2359234) | Cod sursa (job #1843246) | Veri | Cod sursa (job #3328014)
#include <stdio.h>
#include <ctype.h>
#define NMAX 500000
int v[NMAX];
FILE *fin, *fout;
int rInt() {
int rez = 0, ch;
while ( !isdigit( ch = fgetc( fin ) ) );
do
rez = rez * 10 + ch - '0';
while ( isdigit( ch = fgetc( fin ) ) );
return rez;
}
void wInt( int x ) {
int cf[11], i = 0;
do {
cf[i++] = x % 10;
x /= 10;
} while ( x > 0 );
for ( i = i - 1; i >= 0; i-- )
fputc( cf[i] + '0', fout );
fputc( ' ', fout );
}
static inline void swap( int *a, int *b ) {
int aux = *a;
*a = *b;
*b = aux;
}
void radixSort( int v[], int begin, int end, int bit ) {
int p = begin, i;
if ( begin < end && bit >= 1 ) {
for ( i = begin; i <= end; i++ )
if ( (v[i] & bit) == 0 ) {
swap( &v[p], &v[i] );
p++;
}
radixSort( v, begin, p - 1, bit / 2 );
radixSort( v, p, end, bit / 2 );
}
}
int main() {
int n, i;
fin = fopen( "algsort.in", "r" );
n = rInt();
for ( i = 0; i < n; i++ )
v[i] = rInt();
fclose( fin );
radixSort( v, 0, n - 1, 1 << 30 );
fout = fopen( "algsort.out", "w" );
for ( i = 0; i < n; i++ )
wInt( v[i] );
fputc( '\n', fout );
fclose( fout );
return 0;
}