Pagini recente » Cod sursa (job #2192766) | Cod sursa (job #1373307) | Cod sursa (job #3279568) | Cod sursa (job #3282949) | Cod sursa (job #2000253)
#include <fstream>
using namespace std;
const int MAXN = 500000;
int a[MAXN], heapSize;
void Swap(int& a, int& b) {
int t = a;
a = b;
b = t;
}
void DownHeap(int node) {
bool changed;
int best;
do {
best = node;
changed = false;
for (int son = 1; son <= 2; ++son)
if (2 * node + son < heapSize && a[2 * node + son] > a[best])
best = 2 * node + son;
if (best != node) {
changed = true;
Swap(a[node], a[best]);
node = best;
}
} while (changed);
}
int main() {
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
fin >> n;
for (int i = 0; i < n; ++i)
fin >> a[i];
heapSize = n;
for (int i = n / 2 - 1; i >= 0; --i)
DownHeap(i);
for (int i = 0; i < n; ++i) {
Swap(a[0], a[--heapSize]);
DownHeap(0);
}
for (int i = 0; i < n; ++i)
fout << a[i] << ' ';
}