Pagini recente » Cod sursa (job #2919847) | Cod sursa (job #674809) | Cod sursa (job #1409021) | Cod sursa (job #2799829) | Cod sursa (job #1234762)
#include <algorithm>
#include <cstdio>
using namespace std;
int n,a[500001];
void HeapUp (int n){
if (n<=1) return;
int t;
t=n/2;
if (a[n]>a[t]) { swap(a[n],a[t]); HeapUp(t); }
}
void HeapDown (int n, int r) {
int St,Dr;
if(2*r+1<=n) {
St=a[2*r];
if (2*r+1 <=n) Dr=a[2*r+1];
else Dr=St-1;
if (St>Dr){ if (a[r]<a[2*r]) {swap(a[2*r],a[r]); HeapDown(n,2*r);} }
else {if (a[r]<a[2*r+1]) {swap(a[2*r+1],a[r]); HeapDown(n,2*r+1); } }
}
/*
if (a[2*r]>a[2*r+1]){
if (a[2*r]>a[r]) {swap (a[2*r],a[r]); HeapDown(n,2*r);}
else return;
if (a[2*r+1]>a[r]) {swap (a[2*r+1],a[r]); HeapDown(n,2*r+1);}
else return;
}
*/
}
using namespace std;
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]);
HeapUp(i);
}
int cn=n;
int i=1;
while (n>1){
swap(a[1],a[n]);
n--;
HeapDown(n,1);
}
for (int i=1; i<=cn; i++) printf("%d ",a[i]);
return 0;
}