Pagini recente » Cod sursa (job #1220913) | Cod sursa (job #1266727) | Cod sursa (job #2351745) | Cod sursa (job #3347125)
#include <iostream>
#define NMAX 500000
void heap_sort(int *v, int n)
{
int a;
for (int k = n / 2 - 1; k >= 0; --k) {
for (int i = k, j = i, l, r; 1; i = j) {
l = 2 * i + 1;
r = 2 * i + 2;
if (l < n && v[l] > v[j])
j = l;
if (r < n && v[r] > v[j])
j = r;
if (j == i)
break;
a = v[i];
v[i] = v[j];
v[j] = a;
}
}
for (--n; n > 0; --n) {
a = v[n];
v[n] = v[0];
v[0] = a;
for (int i = 0, j = i, l, r; 1; i = j) {
l = 2 * i + 1;
r = 2 * i + 2;
if (l < n && v[l] > v[j])
j = l;
if (r < n && v[r] > v[j])
j = r;
if (j == i)
break;
a = v[i];
v[i] = v[j];
v[j] = a;
}
}
}
int main()
{
int n;
int v[NMAX];
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
std::cin >> n;
for (int i = 0; i < n; ++i)
std::cin >> v[i];
heap_sort(v, n);
for (int i = 0; i < n; ++i)
std::cout << v[i] << ' ';
std::cout << '\n';
return 0;
}