#include<stdio.h>
void create_heap(int *arr,int i,int lim)
{
int r=i/2,lc,rc,tmp,max;
lc=(2*r)+1;
rc=(2*r)+2;
if(lc>lim)
return;
if(rc<=lim)
{
if(arr[lc]<arr[rc])
max=rc;
else
max=lc;
}
else
max=lc;
if(arr[r]<arr[max])
{
tmp=arr[r];
arr[r]=arr[max];
arr[max]=tmp;
}
}
void heap(int *arr,int lim)
{
int i;
for(i=lim;i>=0;i--)
create_heap(arr,i,lim);
}
void heap_sort(int *arr,int n)
{
int i,tmp;
for(i=0;i<n-1;i++)
{
heap(arr,n-1-i);
tmp=arr[0];
arr[0]=arr[n-1-i];
arr[n-1-i]=tmp;
}
}
void display(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
}
int main()
{
int *arr,n,i;
printf("Enter the no. of elements : ");
scanf("%d",&n);
arr=(int*)malloc(sizeof(int)*n);
printf("\n\nEnter %d elements :",n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
printf("\n\nBefore Sorting :");
display(arr,n);
heap_sort(arr,n);
printf("\n\nAfter Sorting :");
display(arr,n);
return 0;
}
No comments:
Post a Comment