Pagini recente » Cod sursa (job #1275426) | Cod sursa (job #801422) | Cod sursa (job #1299481) | Cod sursa (job #1505217) | Cod sursa (job #1321375)
#include <cstdio>
using namespace std;
int arr[500001],n;
void MAX_HEAPIFY(int *a, int i, int n)
{
int j, temp;
temp=a[i];
j=2*i;
while(j<=n)
{
if(j<n && a[j+1]>a[j])
j++;
if (temp>a[j])
break;
else
if (temp<=a[j])
{
a[j/2]=a[j];
j=2*j;
}
}
a[j/2]=temp;
return;
}
void HeapSort(int *a, int n)
{
int i,temp;
for (i= n;i>=2;i--)
{
temp=a[i];
a[i]=a[1];
a[1]=temp;
MAX_HEAPIFY(a, 1, i-1);
}
}
void BUILD_MAXHEAP(int *a, int n)
{
int i;
for(i=n/2;i>=1;i--)
{
MAX_HEAPIFY(a, i, n);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&arr[i]);
BUILD_MAXHEAP(arr,n);
HeapSort(arr,n);
for(int i=1;i<=n;i++)
printf("%d ",arr[i]);
return 0;
}