Pagini recente » Cod sursa (job #1246523) | Cod sursa (job #1795602) | Cod sursa (job #831082) | Cod sursa (job #778802) | Cod sursa (job #339130)
Cod sursa(job #339130)
#include <stdio.h>
#define MAXN 2000000
class Heap
{
public:
int size;
int h[MAXN];
Heap();
void makeHeap();
int getTop();
void deleteMin();
void heapSort();
void heapify(int key);
void insertElement(int key);
};
Heap::Heap()
{
size = 0;
}
void swap(int &x,int &y)
{
int temp;
temp = x;
x = y;
y = temp;
}
void Heap::heapify(int key)
{
while ((h[key]<h[2*key] || h[key]<h[2*key+1]) && 2*key<=size)
{
if (2*key+1>size && h[2*key]>h[key])
{
swap(h[key],h[2*key]);
key = 2*key;
}
else if (2*key+1>size)
{
return;
}
else if (h[2*key]>h[2*key+1])
{
swap(h[key],h[2*key]);
key = 2*key;
}
else
{
swap(h[key],h[2*key+1]);
key = 2*key + 1;
}
}
}
void Heap::insertElement(int key)
{
size++;
h[size] = key;
key = size;
while (h[key/2] < h[key] && key>1)
{
swap(h[key/2],h[key]);
key/=2;
}
}
int Heap::getTop()
{
return h[1];
}
void Heap::deleteMin()
{
swap(h[1],h[size]);
size--;
heapify(1);
}
void Heap::makeHeap()
{
int i;
for (i=size/2;i>=1;i--)
{
heapify(i);
}
}
void Heap::heapSort()
{
int i,sz = size;
for (i=1;i<=sz;i++)
{
deleteMin();
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
Heap a;
int i,n,aux;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d",&aux);
a.insertElement(aux);
}
a.heapSort();
for (i=1;i<=n;i++)
{
printf("%d ",a.h[i]);
}
return 0;
}