Cod sursa(job #1607947)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 21 februarie 2016 18:53:21
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <cstdio>
using namespace std;
FILE *f,*g;
#define MAXSIZE 500003
int v[MAXSIZE];
int v_SIZE=0;
void interschimbare(int x,int y)
{

    int aux=v[x];
    v[x]=v[y];
    v[y]=aux;
}

void inserare(int numar)
{
    v_SIZE++;
    v[v_SIZE]=numar;
    int poz=v_SIZE;
    while(poz!=1 && v[poz]<v[poz/2])
    {
        interschimbare(poz,poz/2);
        poz/=2;
    }
}

int pozmin(int poz)
{
    if(v[poz*2]<v[poz*2+1])
    {
        return poz*2;
    }
    if(poz*2+1<=v_SIZE)
    {
        return poz*2+1;
    }
    return poz*2;
}

int stergere(int pozD)
{
    int sters = v[pozD];
    interschimbare(pozD,v_SIZE); //mutare ultima pozitie
    v_SIZE--; //stergere element
    int pmin ;
    while((pozD*2)<=v_SIZE && v[pozD]>v[pmin=pozmin(pozD)])
    {
        interschimbare(pozD,pmin);
        pozD=pmin;
    }
    return sters;
}

int main()
{
    int n,e;
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d ",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d ",&e);
        inserare(e);
    }
    for(int i=1; i<=n; i++)
    {
        printf("%d ", stergere(1));
    }

}