Untitled

 avatar
user_0781376
plain_text
4 days ago
3.0 kB
12
Indexable
package Day3;

import java.util.Arrays;

class Main {
    private int[] heap;
    private int size;
    private int capacity;

    public Main(int capacity) {
        this.capacity = capacity;
        this.size = 0;
        heap = new int[capacity + 1]; // 1-based index
        heap[0] = Integer.MIN_VALUE; // Dummy value
    }

    private int parent(int i) {
        return i / 2;
    }

    private int leftChild(int i) {
        return 2 * i;
    }

    private int rightChild(int i) {
        return 2 * i + 1;
    }

    // Insert a new element into the heap
    public void insert(int value) {
        if (size >= capacity) {
            System.out.println("Heap is full!");
            return;
        }
        size++;
        heap[size] = value;
        heapifyUp(size);
    }

    // Heapify-Up to maintain Min-Heap property
    private void heapifyUp(int i) {
        while (i > 1 && heap[parent(i)] > heap[i]) {
            swap(i, parent(i));
            i = parent(i);
        }
    }

    // Get the minimum element (root)
    public int peek() {
        if (size == 0) {
            throw new IllegalStateException("Heap is empty!");
        }
        return heap[1];
    }

    // Remove and return the minimum element
    public int removeMin() {
        if (size == 0) {
            throw new IllegalStateException("Heap is empty!");
        }
        int min = heap[1];
        heap[1] = heap[size];//fist element replaced by last
        size--;
        heapifyDown(1);
        return min;
    }

    // Heapify-Down to maintain Min-Heap property
    private void heapifyDown(int i) {
        int smallest = i;
        int left = leftChild(i);
        int right = rightChild(i);

        if (left <= size && heap[left] < heap[smallest]) {
            smallest = left;
        }
        if (right <= size && heap[right] < heap[smallest]) {
            smallest = right;
        }
        if (smallest != i) {
            swap(i, smallest);
            heapifyDown(smallest);
        }
    }

    // Swap two elements in the heap
    private void swap(int i, int j) {
        int temp = heap[i];
        heap[i] = heap[j];
        heap[j] = temp;
    }

    // Print the heap
    public void printHeap() {
        System.out.println("Heap: " + Arrays.toString(Arrays.copyOfRange(heap, 1, size + 1)));
    }

    public static void main(String[] args) {
        MinHeap pq = new MinHeap(10);
        
        // Insert elements
        pq.insert(30);
        pq.insert(20);
        pq.insert(10);
        pq.insert(40);
        pq.insert(50);
        pq.insert(5);
        
        pq.printHeap();

        // Peek min element
        System.out.println("Min element (peek): " + pq.peek());

        // Remove min element
        System.out.println("Removed min: " + pq.removeMin());
        pq.printHeap();

        System.out.println("Removed min: " + pq.removeMin());
        pq.printHeap();
    }
}

Editor is loading...
Leave a Comment