Pagini recente » Cod sursa (job #2951593) | Cod sursa (job #3185031) | Cod sursa (job #1228720) | Cod sursa (job #3277164) | Cod sursa (job #332875)
Cod sursa(job #332875)
#include <fstream>
#define MaxN 500001
int n, H[MaxN];
using namespace std;
fstream fin ("algsort.in",ios::in);
fstream fout ("algsort.out",ios::out);
inline int l_fiu(int x){
return 2*x;
};
inline int r_fiu(int x){
return 2*x + 1;
};
void swap_it(int &a, int &b){
int c;
c = a;
a = b;
b = c;
};
void down_heap (int x){
int fiu;
do{
fiu = 0;
if (l_fiu(x) <= n && H[l_fiu(x)] < H[x])
fiu = l_fiu(x);
if (l_fiu(x) < n && H[r_fiu(x)] < H[x] && H[l_fiu(x)] > H[r_fiu(x)] )
fiu = r_fiu(x);
if (fiu) swap_it (H[x],H[fiu]);
x = fiu;
} while (fiu);
};
int main(){
fin>>n;
for (int i = 1; i <= n; ++ i )
fin>>H[i];
for (int i = n/2; i >= 1; -- i)
down_heap(i);
for (;n != 0;){
fout<<H[1]<<' ';
H[1] = H[n];
--n;
down_heap(1);
};
};