Pagini recente » Cod sursa (job #354212) | Cod sursa (job #204279) | Cod sursa (job #1274896) | Cod sursa (job #450425) | Cod sursa (job #1461399)
#include <fstream>
using namespace std;
ofstream fout("algsort.out");
ifstream fin("algsort.in");
const int NMAX = 500005;
int n, v[NMAX];
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; }
inline int afis() { for(int i=1; i<=n; i++) fout << v[i] << ' '; }
inline int citire() { fin >> n; for(int i=1; i<=n; i++) fin >> v[i]; }
void go_down(int nod, int lg)
{
int son = 1;
while(son) {
son = 0;
if(left_son(nod) <= lg) {
son = left_son(nod);
if(right_son(nod) <= lg && v[right_son(nod)] > v[son])
son = right_son(nod);
if(v[son] < v[nod])
son = 0;
}
if(son) {
swap(v[son], v[nod]);
nod = son;
}
}
}
int build_heap() { for(int i=n/2; i; i--) go_down(i, n); }
int heapsort()
{
build_heap();
for(int i=n; i>=2; i--) {
swap(v[i], v[1]);
go_down(1, i-1);
}
}
int main()
{
citire();
heapsort();
afis();
return 0;
}