From b3add3fac75bd05c36e3978a68ab029c3962dfb7 Mon Sep 17 00:00:00 2001 From: torpid-pj <117754858+torpid-pj@users.noreply.github.com> Date: Sun, 15 Jan 2023 11:58:37 +0530 Subject: [PATCH] Create heapSort.java --- sortingAlgo/heapSort/heapSort.java | 79 ++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 sortingAlgo/heapSort/heapSort.java diff --git a/sortingAlgo/heapSort/heapSort.java b/sortingAlgo/heapSort/heapSort.java new file mode 100644 index 0000000..cef2b6d --- /dev/null +++ b/sortingAlgo/heapSort/heapSort.java @@ -0,0 +1,79 @@ +import java.util.*; +import java.io.*; +import java.lang.*; + +public class HeapSort +{ + // building the heap + public void buildheap(int arr[],int n){ + for (int i = n / 2 - 1; i >= 0; i--) + heapify(arr, n, i); + } + + + + public void sort(int arr[]) + { + int n = arr.length; + + buildheap(arr,n); + // One by one extract an element from heap + for (int i=n-1; i>0; i--) + { + + int temp = arr[0]; + arr[0] = arr[i]; + arr[i] = temp; + // call max heapify + heapify(arr, i, 0); + } + } + + + // To heapify a subtree rooted with node i + 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); + } + } + // function to print array of size n + static void printArray(int arr[]) + { + int n = arr.length; + for (int i=0; i