max heap using array list
Fri Jun 07 2024 12:35:28 GMT+0000 (Coordinated Universal Time)
Saved by @signup
// Java program to implement Max Heap
// Main class
public class MaxHeap {
private int[] Heap;
private int size;
private int maxsize;
public MaxHeap(int maxsize)
{
this.maxsize = maxsize;
this.size = 0;
Heap = new int[this.maxsize];
}
private int parent(int pos) { return (pos - 1) / 2; }
private int leftChild(int pos) { return (2 * pos) + 1; }
private int rightChild(int pos)
{
return (2 * pos) + 2;
}
private boolean isLeaf(int pos)
{
if (pos > (size / 2) && pos <= size) {
return true;
}
return false;
}
private void swap(int fpos, int spos)
{
int tmp;
tmp = Heap[fpos];
Heap[fpos] = Heap[spos];
Heap[spos] = tmp;
}
private void maxHeapify(int pos)
{
if (isLeaf(pos))
return;
if (Heap[pos] < Heap[leftChild(pos)]
|| Heap[pos] < Heap[rightChild(pos)]) {
if (Heap[leftChild(pos)]
> Heap[rightChild(pos)]) {
swap(pos, leftChild(pos));
maxHeapify(leftChild(pos));
}
else {
swap(pos, rightChild(pos));
maxHeapify(rightChild(pos));
}
}
}
public void insert(int element)
{
Heap[size] = element;
int current = size;
while (Heap[current] > Heap[parent(current)]) {
swap(current, parent(current));
current = parent(current);
}
size++;
}
public void print()
{
for (int i = 0; i < size / 2; i++) {
System.out.print("Parent Node : " + Heap[i]);
if (leftChild(i)
< size)
System.out.print(" Left Child Node: "+ Heap[leftChild(i)]);
if (rightChild(i)
< size)
System.out.print(" Right Child Node: "+ Heap[rightChild(i)]);
System.out.println(); }
}
public int extractMax()
{
int popped = Heap[0];
Heap[0] = Heap[--size];
maxHeapify(0);
return popped;
}
public static void main(String[] arg)
{
System.out.println("The Max Heap is ");
MaxHeap maxHeap = new MaxHeap(15);
maxHeap.insert(5);
maxHeap.insert(3);
maxHeap.insert(17);
maxHeap.insert(10);
maxHeap.insert(84);
maxHeap.insert(19);
maxHeap.insert(6);
maxHeap.insert(22);
maxHeap.insert(9);
maxHeap.print();
System.out.println("The max val is "+ maxHeap.extractMax());
}
}



Comments