Pagini recente » Cod sursa (job #1304398) | Cod sursa (job #2773890) | Cod sursa (job #1011462) | Cod sursa (job #280461) | Cod sursa (job #381075)
Cod sursa(job #381075)
# include <cstdio>
# include <stdlib.h>
using namespace std;
# define FIN "algsort.in"
# define FOUT "algsort.out"
# define MAX_N 500005
# define Baza 30
int N, i;
int A[MAX_N], B[MAX_N], ct1[Baza], ct2[Baza];
void radix(int st, int dr, int nc)
{
int i, ind;
if (dr <= st) return;
for (i = 0; i <= 9; ++i) ct1[i] = ct2[i] = 0;
for (i = st; i <= dr; ++i) ct1[(A[i] % nc - A[i] % (nc / 10)) / (nc / 10)]++;
for (i = 1; i <= 9; ++i) ct1[i] = ct1[i] + ct1[i - 1];
for (i = st; i <= dr; ++i)
{
ind = (A[i] % nc - A[i] % (nc / 10)) / (nc / 10);
B[ct1[ind - 1] + ct2[ind] + 1] = A[i];
ct2[ind]++;
}
for (i = st; i <= dr; ++i) A[i] = B[i - st + 1];
radix(1, ct2[i], nc * 10);
for (i = 1; i <= 9; ++i) radix(ct1[i - 1] + 1, ct1[i - 1] + ct2[i], nc * 10);
}
int main()
{
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
for (i = 1; i <= N; ++i) scanf("%d", &A[i]);
radix(1, N, 10);
for (i = 1; i <= N; ++i) printf("%d ", A[i]);
return 0;
}