Pagini recente » Cod sursa (job #2984229) | Cod sursa (job #2558341) | Cod sursa (job #2251581) | Cod sursa (job #8422) | Cod sursa (job #376723)
Cod sursa(job #376723)
#include <stdio.h>
#define MAXN 500000
//heap
int h[MAXN + 1];
int lh = 0, n;
void interschimba(int& a, int& b)
{
int aux = a;
a = b;
b = aux;
}
void coboara_in_heap(int poz)
{
int k;
while(1)
{
k = poz;
if(2 * poz <= lh) if(h[2 * poz] < h[poz]) k = 2 * poz;
if(2 * poz + 1 <= lh) if(h[2 * poz + 1] < h[k]) k = 2 * poz + 1;
if(k != poz)
{
interschimba(h[k], h[poz]);
poz = k;
}
else break;
}
}
void urca_in_heap(int poz)
{
while(poz > 1)
{
if(h[poz/2] > h[poz])
{
interschimba(h[poz/2], h[poz]);
poz = poz/2;
}
else break;
}
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
{
scanf("%d", h + i);
lh++;
urca_in_heap(lh);
}
while(lh)
{
printf("%d ", h[1]); //minim
interschimba(h[1], h[lh]);
lh--;
coboara_in_heap(1);
}
return 0;
}