From 4d0a49ce4d406801bf234463e566580f7d1dc6bb Mon Sep 17 00:00:00 2001 From: Shivam Choudhary <53565563+ShivamChoudhary17@users.noreply.github.com> Date: Mon, 4 Oct 2021 21:08:51 +0530 Subject: [PATCH] Added Heap_sort.java (#103) Added Heap sort in java. with detailed explanation --- Java/Heap_Sort.java | 80 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Java/Heap_Sort.java diff --git a/Java/Heap_Sort.java b/Java/Heap_Sort.java new file mode 100644 index 0000000..14251c7 --- /dev/null +++ b/Java/Heap_Sort.java @@ -0,0 +1,80 @@ +//Why is heap sort more efficient than selection sort? +//Heapsort is just like selection sort, but with a better way to get the largest element. +//Instead of scanning all the items to find the max, it pulls it from a heap. +//Heaps have properties that allow heapsort to work in-place, without additional memory. +//Creating the heap is O(N lg N). + + + + +// 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 code + 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); + } +} \ No newline at end of file