Cod sursa(job #1234762)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 27 septembrie 2014 23:02:21
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#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;
}