#include <stdio.h>
#include <stdlib.h>
#define MAX 20
void display(int a[], int n){
int i;
printf("\n Elements in array: ");
for( i=0; i<n; i++)
printf(" %d ", a[i]);
}
void heapify( int a[], int n, int index){
int left = 2*index, right = 2*index+1;
int max = index, tmp;
if( left<n && a[left]>a[max] )
max = left;
if( right<n && a[right]>a[max] )
max = right;
if( max!=index ){
tmp=a[max], a[max]=a[index], a[index]=tmp;
heapify( a, n, max);
}
}
void buildheap( int a[], int n){
int i;
for( i=n/2; i>=0; i--)
heapify( a, n, i );
}
void sort( int a[], int n){
int i, tmp;
buildheap( a, n);
for( i=n-1; i>0; i--){
tmp=a[i], a[i]=a[0], a[0]=tmp;
heapify( a, i, 0);
}
}
int main(){
int a[20];
int n, i;
printf("\n Enter total number of elements in array (max. %d): ", MAX);
scanf("%d", &n);
if( n < 0)
printf("UNDERFLOW \n");
else if( n > MAX)
printf("OVERFLOW \n");
else{
printf("\n Enter item(s) one by one\n");
for( i=0; i<n; i++){
printf(" Enter item no %d : ",i);
scanf("%d", &a[i]);
}
printf("\n Before Sorting");
display(a,n);
sort( a, n);
printf("\n After Sorting");
display(a,n);
printf("\n ");
}
system("pause");
return 0;
}
Outputs