Cod sursa(job #2424611)

Utilizator aviciiTim Bergling avicii Data 23 mai 2019 15:00:08
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int parent(int i)
{
  return i / 2;
}

int left_child(int i)
{
  return 2 * i;
}

int right_child(int i)
{
  return 2 * i + 1;
}

const int N = 500000 + 7;
int n, a[N], heap_dim;

void reconst(int i)
{
  int l = left_child(i), r = right_child(i), poz = i;
  if(l <= heap_dim && a[l] < a[poz])
    poz = l;
  if(r <= heap_dim && a[r] < a[poz])
    poz = r;
  if(i != poz)
  {
    swap(a[i], a[poz]);
    reconst(poz);
  }
}

void del()
{
  swap(a[1], a[heap_dim]);
  heap_dim--;
  reconst(1);
}

void ins(int x)
{
  heap_dim++;
  a[heap_dim] = x;
  int i = heap_dim;
  while(i > 1 && a[parent(i)] > x)
  {
    swap(a[i], a[parent(i)]);
    i = parent(i);
  }
}

int main()
{
  freopen("algsort.in", "r", stdin);
  freopen("algsort.out", "w", stdout);
  scanf("%d", &n);
  for(int i = 1; i <= n; i++ )
  {
    int x;
    scanf("%d", &x);
    ins(x);
  }
  for(int i = 1; i <= n; i++)
  {
    printf("%d ", a[1]);
    del();
  }
  printf("\n");
  return 0;
}