Pagini recente » Cod sursa (job #1578900) | Cod sursa (job #559607) | Cod sursa (job #430982) | Cod sursa (job #2207511) | Cod sursa (job #3233733)
#include <fstream>
using namespace std;
const int N = 5e5;
int n, nh, h[N], v[N];
int tata(int p)
{
return (p - 1) / 2;
}
int fiul_s(int p)
{
return 2 * p + 1;
}
int fiul_d(int p)
{
return 2 * p + 2;
}
void urca(int p)
{
while (p > 0 && h[p] < h[tata(p)])
{
swap(h[p], h[tata(p)]);
p = tata(p);
}
}
void coboara(int p)
{
int fs = fiul_s(p), fd = fiul_d(p), optim = p;
if (fs < nh && h[fs] < h[optim])
{
optim = fs;
}
if (fd < nh && h[fd] < h[optim])
{
optim = fd;
}
if (optim != p)
{
swap(h[p], h[optim]);
coboara(optim);
}
}
void adauga(int x)
{
h[nh++] = x;
urca(nh - 1);
}
void sterge(int p)
{
if (p == nh - 1)
{
nh--;
return;
}
h[p] = h[nh-1];
nh--;
urca(p);
coboara(p);
}
int main()
{
ifstream in("algsort.in");
ofstream out("algsort.out");
in >> n;
for (int i = 0; i < n; i++)
{
int aux;
in >> aux;
adauga(aux);
}
for (int i = 0; i < n; i++)
{
v[i] = h[0];///aducem minimul dintre cele ramase pe pozitia i (ca la sortarea prin sel.)
sterge(0);
}
for (int i = 0; i < n; i++)
{
out << v[i] << " ";
}
in.close();
out.close();
return 0;
}