Pagini recente » Cod sursa (job #2128169) | Cod sursa (job #3247571) | Cod sursa (job #2262205) | Cod sursa (job #2675082) | Cod sursa (job #832906)
Cod sursa(job #832906)
#include<fstream>
#define lheap 500000
using namespace std;
int H[lheap];
int tata(int nod){
return nod/2;}
int fiu_st(int nod){
return nod*2;}
int fiu_dr(int nod){
return nod*2+1;}
void cerne(int n,int nod){
int fiu;
do{
fiu=0;
if(fiu_st(nod)<=n){
fiu=fiu_st(nod);
if((fiu_dr(nod)<=n)&&(H[fiu_dr(nod)])>H[fiu_st(nod)])fiu=fiu_dr(nod);
if(H[fiu]<=H[nod])fiu=0;
}
if(fiu){
int aux=H[fiu];
H[fiu]=H[nod];
H[nod]=aux;}
nod=fiu;
}while(fiu);
}
void construire_heap(int n){
int i;
for(i=n/2;i>=1;i--)
cerne(n,i);
}
void heapsort(int n){
construire_heap(n);
int i;
for (i=n;i>=2;i--) {
int aux=H[1];
H[1]=H[i];
H[i]=aux;
cerne(i-1, 1);
}
}
int main()
{int n,i;
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=1;i<=n;i++)
f>>H[i];
heapsort(n);
for(i=1;i<=n;i++)
g<<H[i]<<" ";
}