DS – Heap Sort Program

#include<stdio.h>
void constructHeap(int[], int);
void deleteMaxAndReConstruct(int[], int, int);
int main()
{
            int list[50], n, i, j ;
            printf(“Enter number of elements : “);
            scanf(“%d”, &n);
 
            for(i=1 ; i<=n ; i++)
            {
                        list[i] = rand()%32767 ;
            }
            printf(“list of elements before sort : \n”);
            for( i=1 ; i<=n ; i++ )
            {
                        printf(“%d\t”, list[i]);
            }
             printf(“\n\n”);
 
            for(i=1 ; i<=n ; i++)
            {
                        constructHeap(list, i);
            }
 
            j=n;
             for(i=1 ; i<=j ; i++)
             {
                        int temp;
                        temp=list[1];
                        list[1]=list[n];
                        list[n]=temp;
                        n–;
                        deleteMaxAndReConstruct(list,1,n);
            }
            n=j;
            printf(“list of elements after sort : \n”);
            for( i=1 ; i<=n ; i++ )
            {
                        printf(“%d\t”,list[i]);
            }
            printf(“\n\n”);  
            return 0;
}
void constructHeap(int a[] , int i)
{
                        int v=a[i];
                        while((i>1)&&(a[i/2]<v))
                        {
                                    a[i]=a[i/2];
                                    i=i/2;
                        }
                        a[i]=v;
}
void deleteMaxAndReConstruct(int a[], int i, int n)
{
        int v=a[i];
        int j=i*2;
        while(j<=n)
        {
                if((j<n)&&(a[j]<a[j+1]))
                        j++;
                if(a[j]<a[j/2])
                       break;
 
                a[j/2]=a[j];
                j=j*2;
        }
        a[j/2]=v;
}
Scroll to Top