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
public class HeapSort {
public void sort( int arr[])
{
int n = arr.length;
for ( int i = n / 2 - 1 ; i >= 0 ; i--)
heapify(arr, n, i);
for ( int i = n - 1 ; i >= 0 ; i--) {
int temp = arr[ 0 ];
arr[ 0 ] = arr[i];
arr[i] = temp;
heapify(arr, i, 0 );
}
}
void heapify( int arr[], int n, int i)
{
int largest = i;
int l = 2 * i + 1 ;
int r = 2 * i + 2 ;
if (l < n && arr[l] > arr[largest])
largest = l;
if (r < n && arr[r] > arr[largest])
largest = r;
if (largest != i) {
int swap = arr[i];
arr[i] = arr[largest];
arr[largest] = swap;
heapify(arr, n, largest);
}
}
static void printArray( int arr[])
{
int n = arr.length;
for ( int i = 0 ; i < n; ++i)
System.out.print(arr[i] + " " );
System.out.println();
}
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:
- Convert the input array into a max heap using the STL priority queue.
- Remove the top element of the max heap and place it at the end of the array.
- Repeat step 2 for all the remaining elements in a heap.
Java
import java.util.*;
public class HeapSortUsingSTL {
public static void heapSort( int [] arr)
{
PriorityQueue<Integer> 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();
}
}
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));
}
}
|
OutputBefore 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!