Pagini recente » Cod sursa (job #2424623) | Cod sursa (job #2508808) | Cod sursa (job #2368127) | Cod sursa (job #2422154) | Cod sursa (job #344671)
Cod sursa(job #344671)
#include <stdio.h>
#define N 1<<19
int n, dim;
long long heap[N];
void interschimba(int poz1, int poz2)
{
int temp = heap[poz1];
heap[poz1] = heap[poz2];
heap[poz2] = temp;
}
void muta_in_sus(int poz)
{
if (poz > 1 && heap[poz/2] > heap[poz])
{
interschimba(poz, poz/2);
muta_in_sus(poz/2);
}
}
void muta_in_jos(int poz)
{
if ((2*poz <= n && heap[poz] > heap[2*poz] ) ||
(2*poz+1<= n && heap[poz] > heap[2*poz+1]))
{
int maximum = 2*poz;
if (2*poz+1 <= n && heap[2*poz+1] < heap[2*poz])
maximum = 2*poz+1;
interschimba(poz, maximum);
muta_in_jos(maximum);
}
}
long long extrage_minim()
{
int ret = heap[1];
heap[1] = heap[n--];
muta_in_jos(1);
return ret;
}
void heapify()
{
int i;
for (i = n; i >=1; i--)
muta_in_jos(i);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int i;
scanf("%d", &n);
dim = n;
for (i = 1; i <= n; i++)
scanf("%lld", &heap[i]);
heapify();
for (i = 1; i <= dim; i++)
printf("%lld ", extrage_minim());
return 0;
}