Pagini recente » Cod sursa (job #840687) | Cod sursa (job #2762759) | Cei mai harnici utilizatori infoarena | Cei mai harnici utilizatori infoarena | Cod sursa (job #1461405)
#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 void afis() { for(int i=1; i<=n; i++) fout << v[i] << ' '; }
inline void 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;
}
}
}
void build_heap() { for(int i=n/2; i; i--) go_down(i, n); }
void 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;
}