Cod sursa(job #2749492)

Utilizator SilviuIIon Silviu SilviuI Data 6 mai 2021 20:29:48
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#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 = u; 
		
		if (u * 2 <= size && heap[u * 2] < heap[minn]) {
			
			minn = u * 2;
		} 
		
		if (u * 2 + 1 <= size && heap[u * 2 + 1] < heap[minn]) {
			
			minn = u * 2 + 1;
		}
		
		if (minn == u) 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;
}