Cod sursa(job #1232697)

Utilizator BlueStrutAndrei Prahoveanu BlueStrut Data 23 septembrie 2014 18:22:53
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<cstdio>
using namespace std;
int i, n, a[500003];
void swap(int &a, int &b){int aux; aux=a; a=b; b=aux;}
void heap_up(int poz){
    if (a[poz/2]>a[poz]) {
        swap(a[poz/2], a[poz]);
        if (poz/2>1) heap_up(poz/2);
    }
}
void heap_down(int poz, int n){
    if (2*poz<=n) {
        if (2*poz+1<=n) {if ((a[2*poz]<a[poz])||(a[2*poz+1]<a[poz])){
            if (a[2*poz]<a[2*poz+1]) {
                swap(a[poz], a[2*poz]); heap_down(2*poz, n);
            } else {
                swap(a[poz], a[2*poz+1]); heap_down(2*poz+1, n);
            }}
        } else if (a[2*poz]<a[poz]) swap(a[poz], a[2*poz]);
    }
}
int main(){
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d", &n);
    for (i=1;i<=n;i++) {
        scanf("%d", &a[i]);
        heap_up(i);
    }
    for (i=1;i<=n;i++) {
        printf("%d ", a[1]); a[1]=999999999;
        swap(a[n-i+1], a[1]);
        heap_down(1, n-i);
    }
    return 0;
}