Cod sursa(job #2314105)

Utilizator KaryamKaryam Ahmad Karyam Data 7 ianuarie 2019 21:27:52
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
const int maxn = 5e5+10;
using namespace std;

FILE *fin  = freopen("algsort.in", "r", stdin);
FILE *fout = freopen("algsort.out", "w", stdout);

int n;
int a[maxn];

void heapify(int size, int pos) {
	int lson = pos*2 + 1;
	int rson = pos*2 + 2;
	int largest = pos;
	if (lson < size && a[largest] < a[lson])
		largest = lson;
	if (rson < size && a[largest] < a[rson])
		largest = rson;
	if (largest != pos) {
		swap(a[pos], a[largest]);
		heapify(size, largest);
	}
}

void heapsort() {
	for (int i = n/2-1; i >= 0; -- i)
		heapify(n, i);
	for (int i = n-1; i >= 0; -- i) {
		swap(a[i], a[0]);
		heapify(i, 0);
	}
}

int main() {
	cin >> n;
	for (int i = 0; i < n; ++ i)
		cin >> a[i];
	heapsort();
	for (int i = 0; i < n; ++ i)
		cout << a[i] << " ";
	return 0;
}