Heap Sort Program in C

In this post, we will learn to arrange some integers in descending order using the heap sort technique.

Heap Sort Program in C

Let's create a file named heapsort.c and add the following source code to it:

# include <stdio.h> #define max 20 int heap[max],len; void insheap(int h); int delsheap(int j); int main() { int arr[max],numb,i,j; printf("How many elements to sort? "); scanf("%d",&len); printf("Enter %d values \n", len); for(i=0;i<len;i++) { scanf("%d",&numb); insheap(numb); } j=len-1; for(i=0;i<len;i++) { arr[i]=delsheap(j); j--; } printf("\nThe Descending order is: \n"); for(i=0;i<len;i++) printf("%d\n",arr[i]); return 0; } void insheap(int value) {	static int x;	int par,cur,temp;	if(x==0)	{	heap[x]=value;	x++;	}	else	{	heap[x]=value;	par=(x-1)/2;	cur=x;	do{	if(heap[cur]>heap[par])	{	temp=heap[cur];	heap[cur]=heap[par];	heap[par]=temp;	cur=par;	par=(cur-1)/2;	}	else break;	} while(cur!=0);	x++;	} } int delsheap(int j) {	int loc,n=0,pos,lc=0,rc=0,temp=0;	loc=j;	pos=0;	n=heap[pos];	heap[pos]=heap[loc];	if(loc==0 || loc==1) return (n);	loc--;	lc=2*pos+1;	rc=2*pos+2;	while (rc <=loc)	{	if((heap[pos]>heap[lc] && heap[pos]>heap[rc])) return(n);	else	{	if(heap[lc]>heap[rc])	{	temp=heap[lc];	heap[lc]=heap[pos];	heap[pos]=temp;	pos=lc;	}	else	{	temp=heap[rc];	heap[rc]=heap[pos];	heap[pos]=temp;	pos=rc;	}	lc=2*pos+1;	rc=2*pos+2;	}	}	if(lc==loc)	{ if(heap[pos]<heap[lc]) { temp=heap[pos]; heap[pos]=heap[lc]; heap[lc]=temp; pos=lc; }	}	return(n); } 

To compile and run the above C program, you can use C Programs Compiler Online tool.

Output:

How many elements to sort? 7 Enter 7 values 7 6 4 5 1 2 3 The Descending order is: 7 6 5 4 3 2 1

Comments