Cod sursa(job #1169680)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 11 aprilie 2014 21:07:27
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
#include <algorithm>
using namespace std;
static const int NMAX=500005;
struct MaxHeap
{
    int size,* array;
};
void maxHeapify(struct MaxHeap* maxHeap, int idx)
{
    int largest = idx;
    int left = (idx << 1) + 1;
    int right = (idx + 1) << 1;
    if (left < maxHeap->size && maxHeap->array[left] > maxHeap->array[largest]) largest = left;
    if (right < maxHeap->size && maxHeap->array[right] > maxHeap->array[largest]) largest = right;
    if (largest != idx)
    {
        swap(maxHeap->array[largest], maxHeap->array[idx]);
        maxHeapify(maxHeap, largest);
    }
}
struct MaxHeap* createAndBuildHeap(int *array, int size)
{
    int i;
    struct MaxHeap* maxHeap = (struct MaxHeap*) malloc(sizeof(struct MaxHeap));
    maxHeap->size = size;
    maxHeap->array = array;
    for (i = (maxHeap->size - 2) / 2; i >= 0; --i)
        maxHeapify(maxHeap, i);
    return maxHeap;
}
void heapSort(int* array, int size)
{
    struct MaxHeap* maxHeap = createAndBuildHeap(array, size);
    while (maxHeap->size > 1)
    {
        swap(maxHeap->array[0], maxHeap->array[maxHeap->size - 1]);
        --maxHeap->size;
        maxHeapify(maxHeap, 0);
    }
}
int main()
{
    fstream f("algsort.in",ios::in),g("algsort.out",ios::out);
    int n,i,v[NMAX]= {};
    f>>n;
    for(i=0; i<n; ++i) f>>v[i];
    f.close();
    heapSort(v,n);
    for(i=0; i<n; ++i) g<<v[i]<<" ";
    g<<"\n";
    g.close();
}