Cod sursa(job #1835993)

Utilizator d0rina2011Craciun Dorina d0rina2011 Data 27 decembrie 2016 17:34:55
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

using namespace std;

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

const int MAX_HEAP_SIZE = 16384;
typedef int Heap[MAX_HEAP_SIZE];

inline int father(int nod) {
    return nod / 2;
}

inline int left_son(int nod) {
    return nod * 2;
}

inline int right_son(int nod) {
    return nod * 2 + 1;
}

void swap(int* x, int* y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}

void MaxHeapify(int A[], int n, int i)
{
    int largest = i;
    int l = 2*i + 1;
    int r = 2*i + 2;

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

    if (largest != i)
    {
        swap(&A[i], &A[largest]);
        MaxHeapify(A, n, largest);
    }
}

BuildMaxHeap(int A[], int n)
{
    int i;
    for (i=(n/2)-1;i>=0;i--){
        MaxHeapify(A, n, i);
        }
}

void heapSort(int A[], int n)
{
    int i;
    BuildMaxHeap(A, n);
    for (i=n-1; i>=0; i--)
    {
        swap(&A[0], &A[i]);
        int heap_size= i;
        MaxHeapify(A, heap_size, 0);
    }
}

int main()
{
    int A[500001];
    int n, i;
    fin>>n;
    for(i = 0; i < n; i++)
        fin>>A[i];
    heapSort(A, n);
    for(i = 0; i < n; i++)
        fout<<A[i]<<" ";
    return 0;
}