Pagini recente » Cod sursa (job #2481989) | Cod sursa (job #3288608) | Cod sursa (job #2636901) | Cod sursa (job #37276) | Cod sursa (job #2749414)
#include <stdio.h>
#define nmax 500010
using namespace std;
int n;
int heap[nmax];
int arr[nmax];
void my_swap(int &a, int &b)
{
int aux; aux = a; a = b; b = aux;
}
void add_heap(int x)
{
heap[0]++;
int size = heap[0];
heap[size] = x;
while (size > 1 && heap[size] < heap[size / 2]) {
my_swap(heap[size], heap[size / 2]);
size /= 2;
}
}
void remove_heap()
{
my_swap(heap[1], heap[heap[0]]);
heap[heap[0]] = -1;
heap[0]--;
int u = 1;
int size = heap[0];
while (u < size)
{
int minn = -1;
if (u * 2 <= size && heap[u * 2] < heap[u]) {
minn = u * 2;
}
if (u * 2 + 1 <= size && heap[u * 2 + 1] < heap[u * 2]) {
minn = u * 2 + 1;
}
if (minn == -1) return;
my_swap(heap[u], heap[minn]);
u = minn;
}
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int x;
scanf("%d", &x);
add_heap(x);
}
for (int i = 1; i <= n; i++) {
printf("%d ", heap[1]);
remove_heap();
}
return 0;
}