Pagini recente » Cod sursa (job #1737804) | Cod sursa (job #1650337) | Cod sursa (job #690614) | Profil liviuf | Cod sursa (job #662679)
Cod sursa(job #662679)
#include<stdio.h>
#define maxn 500005
using namespace std;
long n, v[maxn], i;
void swap(long &a, long &b)
{long aux=a;
a=b;
b=aux;
}
void siftdown(long v[], long start, long end)
{long child, root=start;
while(2*root+1<=end)
{child=2*root+1;
if(child<end && v[child]<v[child+1])
child++;
if(v[root]<v[child])
{swap(v[root], v[child]);
root=child;
}
else return;
}
}
void heapify(long v[], long n)
{for(long i=n/2-1; i>=0; i--)
siftdown(v, i, n-1);
}
void heapsort(long v[], long n)
{long end;
heapify(v, n);
end=n-1;
while(end>0)
{swap(v[0], v[end]);
siftdown(v, 0, --end);
}
}
int main()
{freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d", &v[i]);
heapsort(v, n);
for(i=0; i<n; i++)
printf("%d ", v[i]);
return 0;
}