Pagini recente » Cod sursa (job #1139999) | Cod sursa (job #1909452) | Cod sursa (job #897346) | Cod sursa (job #1908393) | Cod sursa (job #1490013)
#include <stdio.h>
#include <stdlib.h>
int a[100], n, m;
void siftUp(int index)
{
int tata = (index-1)/2, aux;
if(a[index] < a[tata])
{
aux = a[index];
a[index] = a[tata];
a[tata] = aux;
siftUp(tata);
}
}
void siftDown(int index)
{
int fiu1 = 2*index + 1;
int fiu2 = 2*index + 2, aux;
if(fiu1 >= n)
return;
else if(fiu2 >= n && (a[index] > a[fiu1]))
{
aux = a[index];
a[index] = a[fiu1];
a[fiu1] = aux;
}
else if((a[index] > a[fiu1]) && (a[fiu1] < a[fiu2]))
{
aux = a[index];
a[index] = a[fiu1];
a[fiu1] = aux;
siftDown(fiu1);
}
else if((a[index] > a[fiu2]) && (a[fiu2] < a[fiu1]))
{
aux = a[index];
a[index] = a[fiu2];
a[fiu2] = aux;
siftDown(fiu2);
}
}
void push(int x)
{
n++;
a[n-1] = x;
siftUp(n-1);
}
int pop()
{
int au = a[0];
a[0] = a[--n];
siftDown(0);
return au;
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int i, x;
scanf("%d", &m);
for(i = 0; i < m; i++)
{
scanf("%d", &x);
push(x);
}
for(i = 0; i < m; i++)
printf("%d ", pop());
return 0;
}