Cod sursa(job #1478030)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 27 august 2015 16:27:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

void max_heapify(int A[], int N, int i)
{
    int l = i * 2;
    int r = i * 2 + 1;

    int largest;

    if (l < N && A[l] > A[i])
        largest = l;
    else
        largest = i;

    if (r < N && A[r] > A[largest])
        largest = r;

    if (i != largest)
    {
        swap(A[i], A[largest]);
        max_heapify(A, N, largest);
    }
}

void build_max_heap(int A[], int N)
{
    for (int i = N / 2; i >= 0; i--)
        max_heapify(A, N, i);
}

void heapsort(int A[], int N)
{
    build_max_heap(A, N);

    for (int i = N - 1; i >= 1; i--)
    {
        swap(A[0], A[i]);
        N--;
        max_heapify(A, N, 0);
    }
}

const int MAX_N = 500000 + 1;

int A[MAX_N];
int N;

int main()
{
    ifstream in("algsort.in");
    ofstream out("algsort.out");

    in >> N;

    for (int i = 0; i < N; ++i)
        in >> A[i];

    heapsort(A, N);

    for (int i = 0; i < N; ++i)
        out << A[i] << " ";

    return 0;
}