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
Post a Comment