Pagini recente » Monitorul de evaluare | Cod sursa (job #1749677) | Cod sursa (job #54145) | Cod sursa (job #2449543) | Cod sursa (job #266776)
Cod sursa(job #266776)
#include <stdio.h>
#define N 666013
int h[N], dim_heap = 0;
inline void interschimb(int &a, int &b)
{
int aux = a;
a = b;
b = aux;
}
void coboara_in_heap(int poz)
{
int poz_min;
while(1)
{
poz_min = poz;
if(h[poz_min] > h[2*poz] && 2*poz <= dim_heap) poz_min = 2*poz;
if(h[poz_min] > h[2*poz+1] && 2*poz+1 <= dim_heap) poz_min = 2*poz+1;
if(poz==poz_min) return;
interschimb(h[poz], h[poz_min]);
poz = poz_min;
}
}
void urca_in_heap(int poz)
{
while(1)
{
if(poz == 1) return;
if(h[poz] < h[poz/2])
{
interschimb(h[poz], h[poz/2]);
poz /= 2;
}
else return;
}
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n, i;
scanf("%d", &n);
for(i=0;i<n;++i)
{
scanf("%d", &h[++dim_heap]);
urca_in_heap(dim_heap);
}
while(dim_heap)
{
printf("%d ", h[1]);
interschimb(h[1], h[dim_heap]);
dim_heap--;
coboara_in_heap(1);
}
fclose(stdin);
return 0;
}