Pagini recente » Cod sursa (job #1750745) | Cod sursa (job #817641) | Cod sursa (job #1348485) | Cod sursa (job #2780566) | Cod sursa (job #1466372)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int a[500001], n;
/* Repara heap-ul al carui radacina are ca index "i", presupunand ca
heap-urile care care au radacinile la copiii lui i sunt valide: 2 * i, 2 * i + 1;
*/
void maxHeap(int i, int m) {
int left, right, larg, loc;
left = 2 * i;
right = 2 * i + 1;
if ((left <= m) && a[left] > a[i]) {
larg = left;
}
else {
larg = i;
}
if((right <= m) && (a[right]) > a[larg]) {
larg = right;
}
if (larg != i) {
loc = a[i];
a[i] = a[larg];
a[larg] = loc;
maxHeap(larg, m);
}
}
void buildMaxHeap() {
int i;
for (i = n / 2; i >= 1; i--) {
maxHeap(i, n);
}
}
void heapSort() {
int i, aux;
buildMaxHeap();
for (i = n; i >= 2; i--) {
aux = a[i];
a[i] = a[1];
a[1] = aux;
maxHeap(1, i - 1);
}
}
int main() {
int i;
fin >> n;
for (i = 1; i <= n; i++) {
fin >> a[i];
}
heapSort();
for (i = 1; i <= n; i++) {
fout << a[i] << "\n";
}
return 0;
}