diff --git a/DSA/JAVA/Algorithms/HeapSort.java b/DSA/JAVA/Algorithms/HeapSort.java new file mode 100644 index 0000000..26ddcea --- /dev/null +++ b/DSA/JAVA/Algorithms/HeapSort.java @@ -0,0 +1,65 @@ +import java.util.Scanner; + +public class HeapSort { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.print("Enter the number of elements: "); + int n = scanner.nextInt(); + int[] arr = new int[n]; + + System.out.println("Enter the elements:"); + for (int i = 0; i < n; i++) { + arr[i] = scanner.nextInt(); + } + + heapSort(arr); + + System.out.println("Sorted array:"); + for (int i : arr) { + System.out.print(i + " "); + } + } + + public static void heapSort(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); + } + } + + public static void heapify(int[] arr, int n, int i) { + int largest = i; + int leftChild = 2 * i + 1; + int rightChild = 2 * i + 2; + + if (leftChild < n && arr[leftChild] > arr[largest]) { + largest = leftChild; + } + + if (rightChild < n && arr[rightChild] > arr[largest]) { + largest = rightChild; + } + + if (largest != i) { + int swap = arr[i]; + arr[i] = arr[largest]; + arr[largest] = swap; + + + heapify(arr, n, largest); + } + } +}