Cod sursa(job #2033286)

Utilizator Horia14Horia Banciu Horia14 Data 6 octombrie 2017 16:24:57
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<cstdio>
#define MAX_N 500000
using namespace std;

int heap[MAX_N+1], n, k;

inline void Swap(int i, int j) {
    int aux = heap[i];
    heap[i] = heap[j];
    heap[j] = aux;
}

void heapDown(int i) {
    int leftson, rightson;
    if(2*i > k) return;
    leftson = heap[2*i];
    if(2*i+1 <= k)
        rightson = heap[2*i+1];
    else rightson = leftson + 1;
    if(leftson < rightson) {
        if(heap[i] <= leftson) return;
        Swap(i,2*i);
        heapDown(2*i);
    }
    else {
        if(heap[i] <= rightson) return;
        Swap(i,2*i+1);
        heapDown(2*i+1);
    }
}

int main() {
    int i;
    FILE *fin, *fout;
    fin = fopen("algsort.in","r");
    fout = fopen("algsort.out","w");
    fscanf(fin,"%d",&n);
    for(i=1; i<=n; i++)
        fscanf(fin,"%d",&heap[i]);
    fclose(fin);
    k = n;
    for(i=n/2; i>=1; i--)
        heapDown(i);

    for(i=1; i<=n; i++) {
        fprintf(fout,"%d ",heap[1]);
        Swap(1,k);
        k--;
        heapDown(1);
    }
    fprintf(fout,"\n");
    fclose(fout);
    return 0;
}