Cod sursa(job #2068781)

Utilizator mateibanuBanu Matei Costin mateibanu Data 18 noiembrie 2017 11:08:42
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;

FILE*f=fopen("algsort.in","r");
FILE*g=fopen("algsort.out","w");

int h[500020],nr;

void up(int p){
    if (p>1&&h[p]<h[p/2]) {
        swap(h[p],h[p/2]);
        up(p/2);
    }
}

void add(int x){
    nr++;
    h[nr]=x;
    up(nr);
}

void down(int p){
    if (p*2+1<=nr&&(h[p*2]<h[p]||h[p*2+1]<h[p])){
        if (h[p*2+1]>h[p*2]) {
        swap(h[p*2],h[p]);
        down(p*2);}
        else {swap(h[p*2+1],h[p]);down(p*2+1);}
    }
    else if (p*2<=nr&&h[p*2]<h[p]) {swap(h[p*2],h[p]);down(p*2);}
}

void del(){
    swap(h[1],h[nr]);
    nr--;
    down(1);
}

int main()
{
    int n,i,x;
    fscanf(f,"%d",&n);
    nr=0;
    for (i=1;i<=n;i++){
        fscanf(f,"%d",&x);
        add(x);
    }
    while (nr){
        fprintf(g,"%d ",h[1]);
        del();
    }
    fclose(f);
    fclose(g);
    return 0;
}