Cod sursa(job #1988884)

Utilizator DryCookerDordea Dragos DryCooker Data 5 iunie 2017 02:03:42
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

const int k=1e6+1;

int numbers[k], n;

void heap(int position)
{
    int aux;
    if(position==1)
        return;
    if(numbers[position]>numbers[position/2]){
        aux=numbers[position];
        numbers[position]=numbers[position/2];
        numbers[position/2]=aux;
        heap(position/2);
    }
}

void heapkappa(int position, int contor)
{
    int l=position*2;
    int r=position*2+1;
    int boss=position;
    int aux;
    if(l<=contor && numbers[l]>numbers[boss])
        boss=l;
    if(r<=contor && numbers[r]>numbers[boss])
        boss=r;
    if(boss!=position){
        aux=numbers[position];
        numbers[position]=numbers[boss];
        numbers[boss]=aux;
        heapkappa(boss,contor);
    }
}

void heapsort()
{
    int aux;
    for(int i=n; i>=1; i--){
        aux=numbers[i];
        numbers[i]=numbers[1];
        numbers[1]=aux;
        heapkappa(1,i-1);
    }
}

void print()
{
    for(int i=1; i<=n; i++)
        fout<<numbers[i]<<" ";
}

int main()
{
    fin>>n;
    for(int i=1; i<=n; i++){
        fin>>numbers[i];
        heap(i);
    }
    heapsort();
    print();
}