Pagini recente » Cod sursa (job #2260942) | Cod sursa (job #726433) | Cod sursa (job #1838872) | Cod sursa (job #2389354) | Cod sursa (job #1838750)
/* Sortare folosita: HeapSort */
#include <fstream>
using namespace std;
#define NMAX 500002
#define L(x) ((x) << 1)
#define R(x) ((x) << 1) + 1
ifstream fin("algsort.in");
ofstream fout("algsort.out");
void max_heapify(int H[], int N, int i) {
int left, right, largest;
bool changed;
do {
changed = false;
left = L(i);
right = R(i);
if (left <= N && H[left] > H[i])
largest = left;
else
largest = i;
if (right <= N && H[right] > H[largest])
largest = right;
if (i != largest) {
swap(H[i], H[largest]);
i = largest;
changed = true;
}
} while (changed == true);
}
void build_max_heap(int H[], int N) {
for (int i = N / 2; i >= 1; --i)
max_heapify(H, N, i);
}
void heapsort(int H[], int N) {
build_max_heap(H, N);
for (int i = N; i >= 2; --i) {
swap(H[i], H[1]);
N--;
max_heapify(H, N, 1);
}
}
int v[NMAX];
int main() {
int N;
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> v[i];
heapsort(v, N);
for (int i = 1; i <= N; ++i)
fout << v[i] << " ";
return 0;
}