Pagini recente » Cod sursa (job #68080) | Cod sursa (job #2183925) | Cod sursa (job #100522) | Cod sursa (job #3182103) | Cod sursa (job #325065)
Cod sursa(job #325065)
#include<fstream.h>
#define max 500000
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,a[max];
void citire()
{
f>>n;
for(int i=1;i<=n;i++)
f>>a[i];
}
void afisare()
{
for(int i=1;i<=n;i++)
g<<a[i]<<' ';
}
void cerne(int i,int n)
{int x,j,k=i;
do { j=k;
if(2*j<=n&&a[k]<a[2*j])
k=2*j;
if(2*j+1<=n&&a[k]<a[2*j+1])
k=2*j+1;
x=a[k];
a[k]=a[j];
a[j]=x;
}while(j!=k);
}
void make_heap()
{
for(int i=n/2;i>0;i--)
cerne(i,n);
}
void heapsort()
{int x;
make_heap();
for(int i=n;i>=2;i--)
{x=a[i];
a[i]=a[1];
a[1]=x;
cerne(1,i-1);}
}
int main()
{citire();
heapsort();
afisare();
return 0;
}