Pagini recente » Cod sursa (job #2014055) | Cod sursa (job #337614) | Cod sursa (job #2842340) | Cod sursa (job #1341853) | Cod sursa (job #363016)
Cod sursa(job #363016)
#include<fstream>
#define dmax 500003
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int n;
typedef long long heap[dmax];
heap h;
int left_son(int k)
{ return 2*k;
}
int right_son(int k)
{ return 2*k+1;
}
void swap(long long &a,long long &b)
{ long long p;
p=a;
a=b;
b=p;
}
void sift(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[son])
son=right_son(k);
if(h[son]<h[k])
son=0;
}
if(son)
{ swap(h[son],h[k]);
k=son;
}
}while(son);
}
void bh(int m)
{ int i;
for(i=m/2;i>=1;i--)
sift(m,i);
}
int main()
{ int i;
in>>n;
for(i=1;i<=n;i++)
in>>h[i];
in.close();
bh(n);
for(i=n;i>1;i--)
{ swap(h[i],h[1]);
sift(i-1,1);
}
for(i=1;i<=n;i++)
out<<h[i]<<" ";
out.close();
return 0;
}