Pagini recente » Cod sursa (job #129396) | Cod sursa (job #1331197) | Cod sursa (job #21843) | Cod sursa (job #2875845) | Cod sursa (job #658831)
Cod sursa(job #658831)
#include <stdio.h>
using namespace std;
int n,v[500005];
int valmin(int,int);
void combinare(int,int);
void minheap(void);
void heapsort(void);
void tipar(void);
int main (void)
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&v[i]);
heapsort();
tipar();
return 0;
}
int valmin(int i, int n)
{
if(2*i+1<=n)
if(v[2*i]<=v[2*i+1]) return 2*i;
else return 2*i+1;
else return 2*i;
}
void combinare(int i, int n)
{
int ind, man;
if(i<=n/2)
{
ind = valmin(i,n);
if(v[i]>v[ind])
{
man=v[i];
v[i]=v[ind];
v[ind]=man;
combinare(ind,n);
}
}
}
void minheap()
{
for(int i=n/2;i>=1;i--) combinare(i,n);
}
void heapsort()
{
int man;
minheap();
for(int i=n;i>=1;i--)
{
man=v[i];
v[i]=v[1];
v[1]=man;
combinare(1,i-1);
}
}
void tipar()
{
for(int i=n;i>=1;i--) printf("%d ",v[i]);
}