Pagini recente » Cod sursa (job #1632852) | Cod sursa (job #814924) | Cod sursa (job #337958) | Cod sursa (job #1682838) | Cod sursa (job #1311213)
#include <fstream>
#include <algorithm>
#include <math.h>
#define NMAX 500001
#define NMIC 9001
#define MAXINT 2147483647
using namespace std;
struct limite
{
int st, dr;
};
int v[NMAX];
int bmin[NMIC];
int elr[NMIC];
limite lim[NMIC];
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int main()
{
int n;
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
int h = sqrt(n);
int n2 = n / h;
for (int i = 1; i <= n2; i++)
{
elr[i] = h;
}
if (n%h != 0)
{
n2++;
elr[n2] = n - (n / h*h);
}
//Elemente ramase rezolvat
for (int i = 1; i <= n2; i++)
{
int min2 = MAXINT;
int minpoz = (i-1)*h+1;
for (int j = (i - 1)*h + 1; j <= i*h; j++)
{
if (j > n)
break;
if (v[j] < min2)
{
min2 = v[j];
minpoz = j;
}
}
v[minpoz] = MAXINT;
elr[i]--;
if (min2 == MAXINT)
{
elr[i] = 0;
}
bmin[i] = min2;
}
for (int i = 1; i <= n; i++)
{
int min2 = bmin[1];
int poz = 1;
for (int j = 1; j <= n2; j++)
{
if (bmin[j] < min2)
{
min2 = bmin[j];
poz = j;
}
}
fout << min2 << ' ';
min2 = MAXINT;
int minpoz = (poz-1)*h+1;
for (int j = (poz - 1)*h + 1; j <= poz*h; j++)
{
if (j > n)
break;
if (v[j] < min2)
{
min2 = v[j];
minpoz = j;
}
}
v[minpoz] = MAXINT;
elr[i]--;
if (min2 == MAXINT)
{
elr[poz] = 0;
}
bmin[poz] = min2;
}
}