Pagini recente » Cod sursa (job #1226612) | Cod sursa (job #1185192) | Cod sursa (job #1713542) | Cod sursa (job #2968221) | Cod sursa (job #1311184)
#include <fstream>
#define NMAX 500001
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int parent(int i)
{return i / 2;}
int left(int i)
{return 2 * i;}
int right(int i)
{
return 2 * i + 1;
}
void heapify(int* v,int i,int n)
{
int l = left(i);
int r = right(i);
int min = i;
if (l <= n&& v[l]<v[i])
{
min = l;
}
if (r <= n && v[r] < v[min])
{
min = r;
}
if (i != min)
{
int aux = v[min];
v[min] = v[i];
v[i] = aux;
heapify(v, min, n);
}
}
void build(int *v,int n)
{
for (int i = n / 2; i >= 1; i--)
{
heapify(v, i, n);
}
}
void heapsort(int*v, int n)
{
for (int i = 1; i <= n; i++)
{
fout << v[1]<<' ';
int aux = v[n-i+1];
v[n-i+1] = v[1];
v[1] = aux;
heapify(v, 1, n - i);
}
}
int main()
{
int v[NMAX];
int n;
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
build(v, n);
heapsort(v, n);
}