Cod sursa(job #2907412)

Utilizator thinkphpAdrian Statescu thinkphp Data 30 mai 2022 07:00:08
Problema Sortare prin comparare Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <stdio.h>
#define FIN "algsort.in"
#define FOUT "algsort.out"
#define MAXSIZE 500050

int Heap[ MAXSIZE ],
    size = 0;

void up(int child) {
     int parent;

     parent = child / 2;

      while(parent != 0) {

            if(Heap[parent] >= Heap[child]) {

               int aux = Heap[parent];
                   Heap[parent] = Heap[child];
                   Heap[child] = aux;

               child = parent;
               parent = child / 2;
            } else {
              break;
            }
      }
}

void down(int parent) {

    int child;

    while(2 * parent <= size) {

          child = 2 * parent;

          if(2 * parent + 1 <= size && Heap[2 * parent + 1] < Heap[2 * parent]) {
            child++;
          }

          if(Heap[parent] <= Heap[child]) break;

          int aux = Heap[parent];
              Heap[parent] = Heap[child];
              Heap[child] = aux;

          parent = child;
    }
}

void insertHeap(int elem) {

     Heap[++size] = elem;
     up(size);
}

int main(int argc, char const *argv[]) {

  int n, x;

  freopen(FIN, "r", stdin);
  freopen(FOUT, "w", stdout);

  scanf("%d", &n);

  for(int i = 0; i < n; ++i) {
    scanf("%d", &x);
    insertHeap( x );
  }

  for(int i = 1; i <= n; ++i) {
      int min = Heap[1];
      Heap[1] = Heap[size];
      size--;
      down(1);
      printf("%d ", min);

  }

  return 0;
}