Pagini recente » Cod sursa (job #1085078) | Cod sursa (job #2917287) | Cod sursa (job #986910) | Monitorul de evaluare | Cod sursa (job #1316224)
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int n;
int v[520005];
int sol[520005];
int poz[1000];
int main ()
{
freopen (“algsort.in”, “r”, stdin);
freopen (“algsort.out”, “w”, stdout);
scanf ("%d", &n);
int i, j, lim;
for (i = 1; i <= n; i ++)
scanf ("%d", &v[i]);
lim = sqrt (n) + 1;
for (i = n + 1; i <= lim * lim; i ++)
v[i] = (1 << 31) - 1;
for (i = 1; i <= n; i += lim)
sort (v + i, v + i + lim + 1);
for (i = 1; i <= lim; i ++)
poz[i] = (i - 1) * lim + 1;
for (i = 1; i <= n; i ++)
{
int x, ci;
for (j = 1; j <= lim; j ++)
if (poz[j] <= j * lim)
{
x = v[poz[j]];
ci = j;
break;
}
for (j = 1; j <= lim; j ++)
if (poz[j] <= j * lim && v[poz[j]] < x)
{
x = v[poz[j]];
ci = j;
}
sol[i] = x;
poz[ci] ++;
}
for (i = 1; i <= n; i ++)
printf ("%d ", sol[i]);
return 0;
}