Pagini recente » Cod sursa (job #1335641) | Cod sursa (job #185882) | Cod sursa (job #542371) | Cod sursa (job #155921) | Cod sursa (job #2766580)
#include <cstdio>
#include <algorithm>
using namespace std;
int n, a[500001], sz;
void repair(int i) {
int largest = i, l=2*i, r=2*i+1;
if(l<=sz && a[largest]<a[l]) largest = l;
if(r<=sz && a[largest]<a[r]) largest = r;
if(largest!=i) {
swap(a[largest], a[i]);
repair(largest);
}
}
void build_heap() {
for(int i=sz/2;i>=1;i--) {
repair(i);
}
}
void heapsort() {
sz = n;
build_heap();
for(int i=1;i<=n;i++) {
int mx = a[1];
swap(a[1], a[sz]);
sz--;
repair(1);
}
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for(int i=1;i<=n;i++)
scanf("%d", &a[i]);
heapsort();
for(int i=1;i<=n;i++)
printf("%d ", a[i]);
}