#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; } |