Pagini recente » Cod sursa (job #2946097) | Cod sursa (job #423630) | Cod sursa (job #2773305) | Cod sursa (job #68199) | Cod sursa (job #1169680)
#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();
}