C program of Heap Sort

Complete C program of Heap Sort

#include <stdio.h>
#define MAX 100

void heap_sort(int arr[], int size);
void buildHeap(int arr[], int size);
int del_root(int arr[], int *size);
void restoreDown(int arr[], int i, int size );
void display(int arr[], int n);

main()
{
	int i;
	int arr[MAX],n;

	printf("Enter number of elements : ");
	scanf("%d",&n);

	for(i=1;i<=n;i++)
	{
		printf("Enter element %d : ",i);
		scanf("%d",&arr[i]);
	}

	printf("Entered list is :\n");
	display(arr,n);

	heap_sort(arr,n);

	printf("Sorted list is :\n");
	display(arr,n);

}/*End of main()*/

void heap_sort(int arr[], int size)
{
	int max;
	buildHeap(arr, size);
	printf("Heap is : ");
	display(arr,size);

	while(size>1)
	{
		max = del_root(arr,&size);
		arr[size+1]=max;
	}
}/*End of heap_sort*/

void buildHeap(int arr[], int size)
{
	int i;
	for(i=size/2; i>=1; i--)
		restoreDown(arr,i,size);
}/*End of buildHeap()*/

int del_root(int arr[], int *size)
{
	int max = arr[1];
	arr[1] = arr[*size];
	(*size)--;
	restoreDown(arr,1,*size);
	return max;
}/*End of del_root()*/

void restoreDown(int arr[], int i, int size )
{
	int left=2*i, right=left+1;

	int num=arr[i];

	while(right<=size)
	{
		if( num>=arr[left] && num>=arr[right] )
		{
			arr[i] = num;
			return;
		}
		else if(arr[left] > arr[right])
		{
			arr[i] = arr[left];
			i = left;
		}
		else
		{
			arr[i] = arr[right];
			i = right;
		}
		left = 2 * i;
		right = left + 1;
	}

	if(left == size && num < arr[left] ) /*when right == size+1*/
	{
		arr[i]=arr[left];
		i = left;
	}
	arr[i]=num;
}/*End of restoreDown()*/

void display(int arr[], int n)
{
	int i;
	for(i=1;i<=n;i++)
		printf("%d  ",arr[i]);
	printf("\n");
}

Leave a Comment