C - Program for Heap Sort
#include < stdio.h >
#include < conio.h >
void main()
{
int a[50];
int n;
clrscr();
printf("\nEnter n: ");
scanf("%d",&n);
read_data(a,n);
printf("\nBefore sort : \n");
print_data(a,n);
heap_sort(a,n);
printf("\nAfter sort : \n");
print_data(a,n);
}
int read_data(int a[],int max)
{
int i;
printf("\nEnter %d values \n",max);
for(i=1;i<=max;i++)
{
scanf("%d",&a[i]);
}
return;
}
int print_data(int a[],int max)
{
int i;
for(i=1;i<=max;i++)
{
printf("%10d",a[i]);
}
return;
}
int heap_sort(int a[],int n)
{
int i,j,t;
for(i=n/2;i>=1;i--)
{
adjust(a,i,n);
}
for(i=n-1;i>=1;i--)
{
printf("\n");
print_data(a,n);
t=a[i+1];
a[i+1]=a[1];
a[1]=t;
adjust(a,1,i);
}
return;
}
int adjust(int a[],int cur_pos,int max)
{
int cur_rec,j;
cur_rec=a[cur_pos];
j=cur_pos * 2;
while(j<=max)
{
if(j < max)
{
if(a[j] < a[j+1])
{
j=j+1;
}
}
if(a[j] > cur_rec)
{
a[j/2]=a[j];
j=j*2;
}
else
break;
}
a[j/2]=cur_rec;
return;
}