Pagini recente » Cod sursa (job #853111) | Cod sursa (job #2610387) | Cod sursa (job #1626136) | Cod sursa (job #2424891) | Cod sursa (job #274913)
Cod sursa(job #274913)
// heap
#include<stdio.h>
int a[100],n;
void schimb(int &kaka,int &zidane)
{
int becali = kaka;
kaka = zidane;
zidane = becali;
}
void create_heap()
{
int i, j;
scanf("%d",&n);
scanf("%d",&a[1]);
for(j = 2; j <= n; j++)
{
scanf("%d",&a[j]);
i = j;
while(i > 1)
if(a[i] >= a[i/2])
{
schimb(a[i],a[i/2]);
i = i/2;
}
else
i = 1;
}
}
int erase()
{
int i = 1, j, x = a[1];
a[1] = a[n];
n--;
while(i <= n)
if( 2*i <= n)
{
j = 2*i;
if(j+1 <=n && a[j+1] >= a[j])
j++;
if(a[i] <= a[j])
{
schimb(a[i],a[j]);
i = j;
}
else
i = n+1;
}
else
i = n+1;
return x;
}
void heapsort()
{
int i,j;
j = n;
for(i = n; i >= 1; i--)
a[i] = erase();
n = j;
}
void main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
create_heap();
//for(int i = 1; i <= n; i++)
// printf("%d ",a[i]);
heapsort();
for(int i = 1; i <= n; i++)
printf("%d ",a[i]);
}