Pagini recente » Cod sursa (job #1731247) | Cod sursa (job #1900448) | Diferente pentru utilizator/stargold2 intre reviziile 207 si 208 | Istoria paginii utilizator/bogdan2412 | Cod sursa (job #266768)
Cod sursa(job #266768)
#include <stdio.h>
#define N 10000000
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 = 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]);
coboara_in_heap(poz_min);
}
void urca_in_heap(int poz)
{
if(poz == 1) return;
if(h[poz] < h[poz/2])
{
interschimb(h[poz], h[poz/2]);
urca_in_heap(poz/2);
}
}
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;
}