Heap Sort




#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: