JavaGian java tutorial and java interview question and answer

JavaGian , Free Online Tutorials, JavaGian provides tutorials and interview questions of all technology like java tutorial, android, java frameworks, javascript, ajax, core java, sql, python, php, c language etc. for beginners and professionals.

what is Heap Sort?

Heap Sort

Heap sort processes the elements by creating the min heap or max heap using the elements of the given array. Min heap or max heap represents the ordering of the array in which root element represents the minimum or maximum element of the array. At each step, the root element of the heap gets deleted and stored into the sorted array and the heap will again be heapified.
The heap sort basically recursively performs two main operations.
  • Build a heap H, using the elements of ARR.
  • Repeatedly delete the root element of the heap formed in phase 1.

Complexity

ComplexityBest CaseAverage CaseWorst case
Time ComplexityΩ(n log (n))θ(n log (n))O(n log (n))
Space ComplexityO(1)

Algorithm

HEAP_SORT(ARR, N)
  • Step 1: [Build Heap H]
    Repeat for i=0 to N-1
    CALL INSERT_HEAP(ARR, N, ARR[i])
    [END OF LOOP]
  • Step 2: Repeatedly Delete the root element
    Repeat while N > 0
    CALL Delete_Heap(ARR,N,VAL)
    SET N = N+1
    [END OF LOOP]
  • Step 3: END

C Program

  1. #include<stdio.h>  
  2. int temp;  
  3.   
  4. void heapify(int arr[], int size, int i)  
  5. {  
  6. int largest = i;    
  7. int left = 2*i + 1;    
  8. int right = 2*i + 2;    
  9.   
  10. if (left < size && arr[left] >arr[largest])  
  11. largest = left;  
  12.   
  13. if (right < size && arr[right] > arr[largest])  
  14. largest = right;  
  15.   
  16. if (largest != i)  
  17. {  
  18. temp = arr[i];  
  19.     arr[i]= arr[largest];   
  20.     arr[largest] = temp;  
  21. heapify(arr, size, largest);  
  22. }  
  23. }  
  24.   
  25. void heapSort(int arr[], int size)  
  26. {  
  27. int i;  
  28. for (i = size / 2 - 1; i >= 0; i--)  
  29. heapify(arr, size, i);  
  30. for (i=size-1; i>=0; i--)  
  31. {  
  32. temp = arr[0];  
  33.     arr[0]= arr[i];   
  34.     arr[i] = temp;  
  35. heapify(arr, i, 0);  
  36. }  
  37. }  
  38.   
  39. void main()  
  40. {  
  41. int arr[] = {11023412100,232};  
  42. int i;  
  43. int size = sizeof(arr)/sizeof(arr[0]);  
  44.   
  45. heapSort(arr, size);  
  46.   
  47. printf("printing sorted elements\n");  
  48. for (i=0; i<size; ++i)  
  49. printf("%d\n",arr[i]);  
  50. }  
Output:
printing sorted elements 

1
1
2
2
2
3
4
10
23
100

Java Program

  1. #include<stdio.h>  
  2. int temp;  
  3.   
  4. void heapify(int arr[], int size, int i)  
  5. {  
  6. int largest = i;    
  7. int left = 2*i + 1;    
  8. int right = 2*i + 2;    
  9.   
  10. if (left < size && arr[left] >arr[largest])  
  11. largest = left;  
  12.   
  13. if (right < size && arr[right] > arr[largest])  
  14. largest = right;  
  15.   
  16. if (largest != i)  
  17. {  
  18. temp = arr[i];  
  19.     arr[i]= arr[largest];   
  20.     arr[largest] = temp;  
  21. heapify(arr, size, largest);  
  22. }  
  23. }  
  24.   
  25. void heapSort(int arr[], int size)  
  26. {  
  27. int i;  
  28. for (i = size / 2 - 1; i >= 0; i--)  
  29. heapify(arr, size, i);  
  30. for (i=size-1; i>=0; i--)  
  31. {  
  32. temp = arr[0];  
  33.     arr[0]= arr[i];   
  34.     arr[i] = temp;  
  35. heapify(arr, i, 0);  
  36. }  
  37. }  
  38.   
  39. void main()  
  40. {  
  41. int arr[] = {11023412100232};  
  42. int i;  
  43. int size = sizeof(arr)/sizeof(arr[0]);  
  44.   
  45. heapSort(arr, size);  
  46.   
  47. printf("printing sorted elements\n");  
  48. for (i=0; i<size; ++i)  
  49. printf("%d\n",arr[i]);  
  50. }  
Output:
printing sorted elements 

1
1
2
2
2
3
4
10
23
100

C# program

  1. using System;  
  2. public class HeapSorting {  
  3. static void heapify(int[] arr, int size, int i)  
  4. {  
  5. int largest = i;    
  6. int left = 2*i + 1;    
  7. int right = 2*i + 2;    
  8. int temp;  
  9. if (left < size && arr[left] > arr[largest])  
  10. largest = left;  
  11.   
  12. if (right < size && arr[right] > arr[largest])  
  13. largest = right;  
  14.   
  15. if (largest != i)  
  16. {  
  17. temp = arr[i];  
  18.     arr[i]= arr[largest];   
  19.     arr[largest] = temp;  
  20. heapify(arr, size, largest);  
  21. }  
  22. }  
  23.   
  24. static void heapSort(int[] arr, int size)  
  25. {  
  26. int i;  
  27. int temp;  
  28. for (i = size / 2 - 1; i >= 0; i--)  
  29. heapify(arr, size, i);  
  30. for (i=size-1; i>=0; i--)  
  31. {  
  32. temp = arr[0];  
  33.     arr[0]= arr[i];   
  34.     arr[i] = temp;  
  35. heapify(arr, i, 0);  
  36. }  
  37. }  
  38.   
  39. public void Main()  
  40. {  
  41. int[] arr = {11023412100232};  
  42. int i;  
  43. heapSort(arr, 10);   
  44. Console.WriteLine("printing sorted elements");  
  45. for (i=0; i<10; ++i)  
  46. Console.WriteLine(arr[i]);  
  47. }  
  48. }  
Output:
printing sorted elements 

1
1
2
2
2
3
4
10
23
100

.