Pagini recente » Cod sursa (job #1976663) | Cod sursa (job #1415374) | Cod sursa (job #2041435) | Cod sursa (job #2806706) | Cod sursa (job #2758998)
/*
pusesem gresit NMAX
*/
#include <iostream>
#include <fstream>
#define NMAX 500000 //cinci sute de mii
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int v[NMAX + 1];
int H[NMAX + 1];
int dimHeap;
void sift(int k){
int son;
do{
son = 0;
if(k * 2 <= dimHeap){
son = k * 2;
if(k * 2 + 1 <= dimHeap && H[k * 2 + 1] < H[k * 2]){
son = k * 2 + 1;
}
}
if(son != 0){
if(H[son] < H[k]){
swap(H[son], H[k]);
k = son;
}
else {
son = 0;
}
}
}while(son != 0);
}
void stergereMinim(){
swap(H[1], H[dimHeap]);
dimHeap--;
sift(1);
}
/*
void afisareHeap(){
for(int i = 1; i <= dimHeap; i++){
cout << H[i] << ' ';
}
cout << "\n";
}
*/
int main()
{
int N;
fin >> N;
dimHeap = N;
for(int i = 1; i <= N; i++){
fin >> v[i];
H[i] = v[i];
}
for(int i = N / 2; i >= 1; i--){
sift(i);
}
for(int i = 1; i <= N; i++){
fout << H[1] << ' ';
stergereMinim();
}
return 0;
}