Pagini recente » Cod sursa (job #520987) | Cod sursa (job #241134) | Cod sursa (job #2503793) | Cod sursa (job #630212) | Cod sursa (job #1086617)
#include<fstream>
using namespace std;
const int NM = 500003;
int h[NM],hp,N;
inline void swap(int &a,int &b){
int k = a; a=b; b=k;
}
void readData(int h[]){
ifstream cin("algsort.in");
cin>>hp; N=hp;
for(int i=1;i<=hp;++i) cin>>h[i];
cin.close();
}
void writeData(int h[]){
ofstream cout("algsort.out");
for(int i=1;i<=N;++i) cout<<h[i]<<' ';
cout.close();
}
void DownHeap(int k){
int nod;
do{
nod=0;
if(2*k<=hp)
{
nod=2*k;
if(nod<hp && h[nod+1] > h[nod]) nod++;
if(h[k] >= h[nod]) nod=0;
else { swap(h[k],h[nod]); k=nod; }
}
}while(nod);
}
void BuildHeap(){
for(int i=hp/2;i>0;--i) DownHeap(i);
}
void HeapSort(int a[]){
readData(h);
BuildHeap();
for(int i=1;i<=N;++i)
{
swap(h[1],h[hp]);
--hp;
DownHeap(1);
}
writeData(h);
}
int main(){
HeapSort(h);
return 0;
}