Cod sursa(job #2083303)

Utilizator karenalo13Diaconu Iulian Andrei karenalo13 Data 7 decembrie 2017 15:12:32
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
void max_heapify(int *a, int i, int n)
{
    int jos, temp;
    temp = a[i];
    jos = 2*i;
    while (jos <= n)
    {
        if (jos < n && a[jos+1] > a[jos])
            jos = jos+1;// ne ducem pe cel mai din dreapta nod
        if (temp > a[jos])
            break; // daca radacina e mai mare decat nodul curent , ne oprim
        else if (temp <= a[jos])
        {
            a[jos/2] = a[jos];
            jos = 2*jos; // punem in radacina , valoarea max( fiu 1 , fiu 2... )
        }
    }
    a[jos/2] = temp; // valoarea radacinii ( penultima ) a devenit valoarea fiului care avusese cea mai mare valoare
    return;
}
void heapsort(int *a, int n)
{
    int i, temp;
    for (i = n; i >= 2; i--)
    {
        temp = a[i];
        a[i] = a[1];
        a[1] = temp;
        max_heapify(a, 1, i - 1);
    } // sortam
}
void build_maxheap(int *a, int n)
{
    int i;
    for(i = n/2; i >= 1; i--)
    {
        max_heapify(a, i, n);
    }
}// creeare heap
int main()
{
    int n, i, x;

    f>>n;
    int a[500002];
    for (i = 1; i <= n; i++)
    {

        f>>a[i];
    }
    build_maxheap(a,n);
    heapsort(a, n);

    for (i = 1; i <= n; i++)
    {
        g<<a[i];
    }
    return 0;
}