Pagini recente » Cod sursa (job #2213428) | Cod sursa (job #1043744) | Cod sursa (job #1337387) | Cod sursa (job #2592892) | Cod sursa (job #519933)
Cod sursa(job #519933)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[500002];
void read();
void heapsort();
void makeheap();
void combine(int i,int n);
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
read();
heapsort();
return 0;
}
void read()
{
int i;
scanf("%ld",&n);
for (i=1;i<=n;scanf("%ld",&a[i]),++i);
}
void heapsort()
{
int i;
makeheap();
for (i=n;i>=1;--i)
{
printf("%ld ",a[1]);
swap(a[1],a[i]);
combine(1,i-1);
}
}
void makeheap()
{
int i;
for (i=n/2;i;--i)
combine(i,n);
}
void combine(int i,int n)
{
int aux,c,t;
aux=a[i];
t=i;
c=2*i;
while (c<=n)
{
if (c+1<=n&&a[c+1]<a[c]) ++c;
if (aux>a[c])
{
a[t]=a[c];
t=c;
c*=2;
}
else c=n+1;
a[t]=aux;
}
}