Cod sursa(job #2811209)

Utilizator victorzarzuZarzu Victor victorzarzu Data 1 decembrie 2021 14:47:49
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("algsort.in");
ofstream g("algort.out");
int n;
int heap[5000001];

void read()
{
  f>>n;
  for(int i = 1;i <= n;++i)
    f>>heap[i];
}

void update_heap(int heap_size, int position)
{
  int left = 2 * position;
  int right = 2 * position + 1;
  int largest = position;

  if(left <= heap_size && heap[left] > heap[largest])
    largest = left;
  if(right <= heap_size && heap[right] > heap[largest])
    largest = right;
  
  if(largest != position)
    {
      swap(heap[largest], heap[position]);
      update_heap(heap_size, largest);
    }
}

void build_heap()
{
  for(int i = n / 2;i >= 1;--i)
    update_heap(n, i);
}

void solve()
{
  build_heap();
  int heap_size = n;
  for(int i = heap_size;i >= 2;--i)
    {
      swap(heap[i], heap[1]);
      --heap_size;
      update_heap(heap_size, 1);
    }
  for(int i = 1;i <= n;++i)
    g<<heap[i]<<" ";
}

int main()
{
  read();
  solve();
  return 0;
}