Cod sursa(job #1979485)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 10 mai 2017 17:58:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include<cstdio>
using namespace std;
int h[500001];
int nh;
void schimba (int p,int q){
  int aux=h[p];
  h[p]=h[q];
  h[q]=aux;
}
void urca(int p){
  if(p>1 && h[p]<h[p/2]){
    schimba(p,p/2);
    urca(p/2);
  }
}
void coborare(int p){
  int fs=2*p,fd=2*p+1,bun=p;
  if(fs<=nh && h[fs]<h[bun])
    bun=fs;
  if(fd<=nh && h[fd]<h[bun])
    bun=fd;
  if(bun!=p){
    schimba(p,bun);
    coborare(bun);
  }
}
void sterge(int p){
  schimba(p,nh);
  nh--;
  urca(p);
  coborare(p);
}
void adauga(int x){
  h[++nh]=x;
  urca(nh);
}
int main()
{
    int n,x;
    int i;
    FILE*fin,*fout;
    fin=fopen("algsort.in","r");
    fout=fopen("algsort.out","w");
    fscanf(fin,"%d",&n);
    for(i=0;i<n;i++){
      fscanf(fin,"%d",&x);
      adauga(x);
    }
    for(i=0;i<n;i++){
      fprintf(fout,"%d ",h[1]);
      sterge(1);
    }
    return 0;
}