Write a program to implement Heap sort Also implement one of
Solution
#include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
void heapsort(int[],int);
 void heapify(int[],int);
 void adjust(int[],int);
 void bubble_sort(int[], int);
int main()
 {
     int a[30000],a1[30000],a2[30000];
     int i,n;
     clock_t t,t2;
     printf(\"Enter size of array: \");
     scanf(\"%d\",&n);
     for(i=0;i<n;i++)
     a[i]=rand()% 100 + 1;
     for(i=0;i<n;i++)
     {
         a1[i]=a[i];
         a2[i]=a[i];
     }
     t = clock();
     heapsort(a1,n);
     t = clock() - t;
     double time_taken = ((double)t)/CLOCKS_PER_SEC; // in seconds
    printf(\"\ Heap sort element sorted\ \");
    printf(\"\ \");
    printf(\"Heap sort () took %f seconds to execute \ \", time_taken);
   
    t2 = clock();
    bubble_sort(a2, n);
    t2 = clock() - t2;
    double time_taken2 = ((double)t2)/CLOCKS_PER_SEC; // in seconds
    printf(\"\ Bubble sort element sorted\ \");
    printf(\"\ \");
    printf(\"Bubble sort () took %f seconds to execute \ \", time_taken2);
     return 0;
 }
void heapsort(int a[],int n) {
    int i,t;
    heapify(a,n);
    for (i=n-1;i>0;i--) {
        t = a[0];
        a[0] = a[i];
        a[i] = t;
        adjust(a,i);
    }
 }
 void heapify(int a[],int n) {
    int k,i,j,item;
    for (k=1;k<n;k++) {
        item = a[k];
        i = k;
        j = (i-1)/2;
        while((i>0)&&(item>a[j])) {
            a[i] = a[j];
            i = j;
            j = (i-1)/2;
        }
        a[i] = item;
    }
 }
 void adjust(int a[],int n) {
    int i,j,item;
    j = 0;
    item = a[j];
    i = 2*j+1;
    while(i<=n-1) {
        if(i+1 <= n-1)
            if(a[i] <a[i+1])
             i++;
        if(item<a[i]) {
            a[j] = a[i];
            j = i;
            i = 2*j+1;
        } else
            break;
    }
    a[j] = item;
 }
 void bubble_sort(int iarr[], int num)
 {
    int i, j, k, temp;
    for (i = 1; i < num; i++)
    {
       for (j = 0; j < num - 1; j++)
       {
          if (iarr[j] > iarr[j + 1])
          {
             temp = iarr[j];
             iarr[j] = iarr[j + 1];
             iarr[j + 1] = temp;
          }
       }
    }
 }
                   number of elements                  Time taken
 Heap Sort               5000                                                  0.001991secs
 Bubble Sort             5000                                                  0.148994secs
 Heap Sort               10000                                                 0.004196secs
 Bubble Sort             10000                                                 0.496741secs
 Heap Sort               20000                                                  0.008796secs
 Bubble Sort             20000                                                 0.929185secs
 Heap Sort               30000                                                 0.012187secs
 Bubble Sort             30000                                                  4.543961secs
from this table we can calulate that heap sort is much faster than bubble sort


