Cod sursa(job #1516239)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 2 noiembrie 2015 21:19:25
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
using namespace std;
void swap (int a , int b)
{
    int tmp;
    tmp=a;
    a=b;
    b=tmp;
}
void shiftdown (int v[500002], int k , int n)// aici iau maximu dinte tata si copii ca pana la urma sa "scot" maximul
{
    while (2*k+1<n)
    {//cat nu am iest din vector
    int child = max(v[2*k+1],v[2*k+2]);
    if (child > v[k])
        {
            swap(child,v[k]);
        }
        k=child;
    }
}
void heapsort (int v[500002] , int n )
{//aici "elimin" cel mai mare termen
    for (int k=n/2;k<n;--k)
    {
        shiftdown(v , k , n);
    }
    while (n-1)
    {
        swap (v[n-1],v[0]);// omor maximul pt a sorta
        shiftdown(v , 0 , n-1);//vad daca radacina e mai mica ca fii
        n--; // scad n ca sa nu scriu peste alte valori
    }
}
int main()
{
    ifstream fin("algsort.in");
    ofstream fout ("algsort.out");
    int n;
    fin>>n;
    int v[n];
    for (int i=0;i<n;++i)
    {
        fin>>v[i];
    }
    heapsort(v , n);
}