Pagini recente » Cod sursa (job #1824435) | Cod sursa (job #283719) | Cod sursa (job #2990729) | Cod sursa (job #481137) | Cod sursa (job #376719)
Cod sursa(job #376719)
#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;k=poz;
while(h[k]>h[2*k]||h[k]>h[2*k+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;
}
break;
}
}
void urca_in_heap(int poz)
{
while(h[poz/2]>h[poz])
{
if(h[poz/2]>h[poz])
{
interschimba(h[poz/2],h[poz]);
poz=poz/2;
}
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;
}