Pagini recente » Cod sursa (job #2203519) | Cod sursa (job #2788515) | Cod sursa (job #2715226) | Cod sursa (job #1414462) | Cod sursa (job #1022783)
#include<iostream>
#include<fstream>
using namespace std;
typedef int Heap[500001];
inline int father(int nod)
{return nod/2;
}
inline int left_son(int nod)
{return nod*2;
}
inline int right_son(int nod)
{return nod*2+1;
}
void sift(Heap H, int N, int K)
{
int son;
do
{son=0;
if(left_son(K)<=N)
{son=left_son(K);
if(right_son(K)<=N && H[right_son(K)]>H[left_son(K)])
son=right_son(K);
if(H[son]<=H[K])
son=0;
}
if(son)
{swap(H[K], H[son]);
K=son;
}
}while(son);
}
void build_heap(Heap H, int N)
{for(int i=N/2;i>0;--i)
sift(H,N,i);
}
void heapsort (Heap H, int N)
{build_heap(H,N);
for(int i=N;i>=2;--i)
{swap(H[1],H[i]);
sift(H,i-1,1);
}
}
int main()
{Heap H;
int N,i;
ifstream f("algsort.in");
f>>N;
for(i=1;i<=N;i++)
f>>H[i];
f.close();
heapsort(H,N);
ofstream g("algsort.out");
for(i=1;i<=N;i++)
g<<H[i]<<" ";
g.close();
return 0;
}