Cod sursa(job #1734291)

Utilizator bogdanpaunFMI Paun Bogdan Gabriel bogdanpaun Data 26 iulie 2016 23:13:49
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;


int *__len;
int __aux;

template<typename T>
void _heapify( T *a, int nod ){

    int largest,l,r;
    int aux;
    while(true)
    {
        largest = nod;
        l=(2*nod);
        r=(2*nod+1);
        if( l < (*__len) )
            if( a[l] > a[largest] )
                largest = l;

        if( r < (*__len) )
            if( a[r] > a[largest] )
                largest = r;

        if( largest != nod ){

         __aux = a[nod];
         a[nod] = a[largest];
         a[largest] = __aux;
         nod = largest;
        }
        else
            break;
    }
}

template<typename T>
void heap_sort_1( T *a , T *b ){

    int _len = b - a;
    __len = &_len;

    for( int i = _len/2 ; i > 0 ; --i ){
        _heapify( a , i-1 );
    }
    for(int i = _len-1 ; i > 1 ; --i){
         __aux = a[0];
         a[0] = a[i];
         a[i] = __aux;
         --b; --_len;
         _heapify(a , 0);
    }
    __aux = a[0];
    a[0] = a[1];
    a[1] = __aux;

}


int main()
{
    const int NN = 500006;
    int a[NN];
    ifstream f("algsort.in");
    ofstream g("algsort.out");

    int n;
    f >> n;
    for(int i=0;i<n;++i)
        f >> a[i];

    heap_sort_1(a , a+n);
    for(int i=0;i<n;++i)
        g << a[i] <<" ";



    return 0;
}