Cod sursa(job #2073825)

Utilizator gundorfMoldovan George gundorf Data 23 noiembrie 2017 19:10:30
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
#define Nmax 500005
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");

int n,v[Nmax];
void Citire ()
{
    int i;
    fin>>n;
    for (i=1; i<=n; i++)
        fin>>v[i];

}
void Percolate (int v[],int poz,int n)
{
    if (v[poz/2]<v[poz]&&poz/2>0)
    {
        swap(v[poz/2],v[poz]);
        Percolate(v,poz/2,n);
    }
}


void Max_Heapify (int v[],int poz,int n)
{
    if  (v[poz*2]>v[poz]||v[poz*2+1]>v[poz])//daca are vreun fiu mai mare ca el
    {
        if (v[poz*2]>v[poz*2+1]&&2*poz<=n) //il iau pe cel mai mare si fac swap intre ei si continui ca sa vad daca a ajuns pe pozitia corecta
        {
            swap(v[poz],v[poz*2]);
            if (poz*2 <= n/2) Max_Heapify(v,poz*2,n);
        }
        else
        { if (poz*2+1<=n)
            swap(v[poz],v[poz*2+1]);
            if (poz*2+1 <= n/2) Max_Heapify(v,poz*2+1,n);
        }
    }
}
void Creare_Heap ()
{
    int i;
    for (i=n/2; i>0; i--)
        Max_Heapify(v,i,n);
}

void Dezradacinare (int v[],int &n)
{
    int i;
    swap(v[1],v[n]);
    n--;
    Max_Heapify(v,1,n);
}

void HeapSort(int v[],int n)
{int copie=n,i;
    while (n>0)
        Dezradacinare(v,n);
    for (i=1;i<=copie;i++)
        fout<<v[i]<<" ";
}




int main()
{ int i;
    Citire();
    Creare_Heap();
        HeapSort(v,n);
    return 0;
}