Pagini recente » Cod sursa (job #1680510) | Cod sursa (job #1432532) | Cod sursa (job #2624378) | Cod sursa (job #1936361) | Cod sursa (job #2458946)
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
using namespace std;
FILE *fin = fopen("radixsort.in", "r");
FILE *fout = fopen("radixsort.out", "w");
#define bsize 1<<20
char buff[bsize];
char stiva[10];
int poz = bsize;
inline char ch()
{
if (poz == bsize)
{
fread(buff, 1, bsize, fin);
poz = 0;
}
return buff[poz++];
}
inline int nr()
{
char x;
do
{
x = ch();
} while (isdigit(x) == 0);
int k = 0;
while (isdigit(x))
{
k = k*10 + x-48;
x = ch();
}
return k;
}
inline void scrie(char x)
{
if (poz == bsize)
{
fwrite(buff, 1, bsize, fout);
poz = 0;
}
buff[poz++] = x;
}
inline void scrieint(int x)
{
do
{
stiva[0]++;
stiva[stiva[0]] = x%10 + 48;
x = x/10;
} while (x!=0);
while (stiva[0] > 0)
{
scrie(stiva[stiva[0]]);
stiva[0]--;
}
}
void gol()
{
fwrite(buff, 1, poz, fout);
}
int a[10000001][2], n;
bool v;
void cifsort(int poz)
{
int p = 1, i, b[10] = {}, c;
for (i = 1; i<=poz; i++)
p = p*10;
for (i = 1; i<=n; i++)
{
c = a[i][v]/p%10;
b[c]++;
}
for (i = 1; i<10; i++)
b[i] = b[i-1] + b[i];
for (i = n; i>=1; i--)
{
c = a[i][v]/p%10;
a[b[c]][1-v] = a[i][v];
b[c]--;
}
v = 1-v;
}
int main()
{
int i, maxc = 0, c;
n = nr();
for (i = 1; i<=n; i++)
{
a[i][0] = nr();
c = log10(a[i][0])+1;
if (c>maxc)
maxc = c;
}
for (i = 0; i<maxc; i++)
cifsort(i);
poz = 0;
for (i = 1; i<=n; i++)
{
scrieint(a[i][v]);
scrie(' ');
//fprintf(fout, "%i ", a[i][v]);
}
gol();
return 0;
}