Pagini recente » Cod sursa (job #1061271) | Cod sursa (job #1883357) | Cod sursa (job #1184847) | Cod sursa (job #2465168) | Cod sursa (job #2388856)
#include <fstream>
int h[500001], n;
inline void percolate(int p) {
while (p > 1 && h[p / 2] < h[p]) {
std::swap(h[p / 2], h[p]);
p /= 2;
}
}
inline void sift(int p) {
int s1, s2;
do {
s1 = 2 * p, s2 = 2 * p + 1;
if (s1 == n) {
if (h[s1] < h[p]) std::swap(h[s1], h[p]);
p = n;
} else if (s1 < n) {
if (h[s2] < h[s1]) std::swap(s1, s2);
if (h[s1] < h[p]) {
std::swap(h[s1], h[p]);
p = s1;
} else p = n;
} else p = n;
} while (p < n);
}
int main() {
std::ifstream in("algsort.in");
std::ofstream out("algsort.out");
int i;
in >> n;
for (i = 1; i <= n; ++i) in >> h[i];
for (i = n; i >= 1; --i) sift(i);
while (n > 0) {
out << h[1] << ' ';
h[1] = h[n];
--n;
sift(1);
}
return 0;
}