 GeeksforGeeks App
Open App Browser
Continue

# Java Program for Heap Sort

Heap sort is a comparison-based sorting technique based on the Binary Heap data structure. It is similar to the selection sort where first find the maximum element and place it at the end. We repeat the same process for the remaining element.

## Java

 `// Java program for implementation of Heap Sort``public` `class` `HeapSort {``    ``public` `void` `sort(``int` `arr[])``    ``{``        ``int` `n = arr.length;` `        ``// Build heap (rearrange array)``        ``for` `(``int` `i = n / ``2` `- ``1``; i >= ``0``; i--)``            ``heapify(arr, n, i);` `        ``// One by one extract an element from heap``        ``for` `(``int` `i = n - ``1``; i >= ``0``; i--) {``            ``// Move current root to end``            ``int` `temp = arr[``0``];``            ``arr[``0``] = arr[i];``            ``arr[i] = temp;` `            ``// call max heapify on the reduced heap``            ``heapify(arr, i, ``0``);``        ``}``    ``}` `    ``// To heapify a subtree rooted with node i which is``    ``// an index in arr[]. n is size of heap``    ``void` `heapify(``int` `arr[], ``int` `n, ``int` `i)``    ``{``        ``int` `largest = i; ``// Initialize largest as root``        ``int` `l = ``2` `* i + ``1``; ``// left = 2*i + 1``        ``int` `r = ``2` `* i + ``2``; ``// right = 2*i + 2` `        ``// If left child is larger than root``        ``if` `(l < n && arr[l] > arr[largest])``            ``largest = l;` `        ``// If right child is larger than largest so far``        ``if` `(r < n && arr[r] > arr[largest])``            ``largest = r;` `        ``// If largest is not root``        ``if` `(largest != i) {``            ``int` `swap = arr[i];``            ``arr[i] = arr[largest];``            ``arr[largest] = swap;` `            ``// Recursively heapify the affected sub-tree``            ``heapify(arr, n, largest);``        ``}``    ``}` `    ``/* A utility function to print array of size n */``    ``static` `void` `printArray(``int` `arr[])``    ``{``        ``int` `n = arr.length;``        ``for` `(``int` `i = ``0``; i < n; ++i)``            ``System.out.print(arr[i] + ``" "``);``        ``System.out.println();``    ``}` `    ``// Driver program``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `arr[] = { ``12``, ``11``, ``13``, ``5``, ``6``, ``7` `};``        ``int` `n = arr.length;` `        ``HeapSort ob = ``new` `HeapSort();``        ``ob.sort(arr);` `        ``System.out.println(``"Sorted array is"``);``        ``printArray(arr);``    ``}``}`

Time Complexity : O(N log N), here N is number of elements in array.

Auxiliary Space : O(1), since no extra space used.

### Approach Name: Heap Sort using STL in Java

Steps:

1. Convert the input array into a max heap using the STL priority queue.
2. Remove the top element of the max heap and place it at the end of the array.
3. Repeat step 2 for all the remaining elements in a heap.

## Java

 `import` `java.util.*;` `public` `class` `HeapSortUsingSTL {` `    ``// Function to perform the heap sort``    ``public` `static` `void` `heapSort(``int``[] arr)``    ``{``        ``PriorityQueue maxHeap``            ``= ``new` `PriorityQueue<>(``                ``Collections.reverseOrder());``        ``for` `(``int` `i = ``0``; i < arr.length; i++) {``            ``maxHeap.offer(arr[i]);``        ``}``        ``for` `(``int` `i = arr.length - ``1``; i >= ``0``; i--) {``            ``arr[i] = maxHeap.poll();``        ``}``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int``[] arr = { ``60``, ``20``, ``40``, ``70``, ``30``, ``10` `};``        ``System.out.println(``"Before Sorting: "``                           ``+ Arrays.toString(arr));``        ``heapSort(arr);``        ``System.out.println(``"After Sorting: "``                           ``+ Arrays.toString(arr));``    ``}``}`

Output

```Before Sorting: [60, 20, 40, 70, 30, 10]
After Sorting: [10, 20, 30, 40, 60, 70]```

Time Complexity: O(n log n)
Auxiliary Space: O(n)

Please refer complete article on Heap Sort for more details!

My Personal Notes arrow_drop_up