Pagini recente » Cod sursa (job #472892) | Cod sursa (job #2466507) | Cod sursa (job #569258) | Cod sursa (job #1497921) | Cod sursa (job #1060888)
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int n;
long v[500000];
void urca(int p)
{
int a;
while (v[p] > v[p/2] && p/2 > 0)
{
a = v[p];
v[p] = v[p/2];
v[p/2] = a;
p /= 2;
}
}
void coboara(int p, int m)
{
int a;
if (2 * p < m && v[p] < v[p * 2])
{
a = v[p];
v[p] = v[p*2];
v[p*2] = a;
coboara(2 * p, m);
}
if (2 * p + 1 < m && v[p] < v[p * 2 + 1])
{
a = v[p];
v[p] = v[p*2 + 1];
v[p*2 + 1] = a;
coboara(2 * p + 1, m);
}
}
void heap_sort()
{
int a;
for (int i = n ; i > 0; i --)
{
a = v[1];
v[1] = v[i];
v[i] = a;
coboara(1, i);
}
}
int main()
{
in >> n;
for (int i = 1; i <= n; i ++)
{
in >> v[i];
urca(i);
}
heap_sort();
for (int i = 1; i <= n; i ++)
out << v[i] << " ";
in.close();
out.close();
return 0;
}