#include<stdio.h>
void HeapTree(int[] , int);
void deleteMax(int[] , int , int);
int main()
{
int list[50], n, i, j ;
printf("Enter number of elements : ");
scanf("%d", &n);
for(i=1 ; i<=n ; i++)
{
list[i] = rand()%32767 ;
}
printf("list of elements before sort : \n");
for( i=1 ; i<=n ; i++ )
{
printf("%d\t", list[i]);
}
printf("\n\n");
for(i=1 ; i<=n ; i++)
{
HeapTree(list, i);
}
j=n;
for(i=1 ; i<=j ; i++)
{
int temp;
temp=list[1];
list[1]=list[n];
list[n]=temp;
n--;
deleteMax(list,1,n);
}
n=j;
printf("list of elements after sort : \n");
for(i=1 ; i<=n ; i++ )
{
printf("%d\t",list[i]);
}
printf("\n\n");
return 0;
}
void HeapTree(int a[] , int i)
{
int v=a[i];
while((i>1)&&(a[i/2]<v))
{
a[i]=a[i/2];
i=i/2;
}
a[i]=v;
}
void deleteMax(int a[], int i, int n)
{
int v=a[i];
int j=i*2;
while(j<=n)
{
if((j<n)&&(a[j]<a[j+1]))
j++;
if(a[j]<a[j/2])
break;
a[j/2]=a[j];
j=j*2;
}
a[j/2]=v;
}
No Comments