Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- public class MaxHeap {
- private int[] arr;
- private int size;
- public MaxHeap(){
- arr = new int[100];
- size = 0;
- }
- public MaxHeap(int[] arr){
- this.arr = arr;
- size = arr.length;
- for (int i = size/2; i >= 0; i--) {
- heapify(i);
- }
- }
- public int getSize() {
- return size;
- }
- private void heapify(int i){
- int largest = i;
- int l = leftChild(i);
- int r = rightChild(i);
- if(l<size && arr[l] > arr[largest])
- largest = l;
- if(r<size && arr[r] > arr[largest])
- largest = r;
- if(largest != i){
- int temp = arr[i];
- arr[i] = arr[largest];
- arr[largest] = temp;
- heapify(largest);
- }
- }
- private void bubbleUp(int i){
- int p;
- //while I am not the root and I am greater than
- //my parent
- while(i!=0 && arr[(p=parent(i))] < arr[i]){
- int temp = arr[i];
- arr[i] = arr[p];
- arr[p] = temp;
- i = p;
- }
- }
- private int leftChild(int i){
- return 2*i + 1;
- }
- private int rightChild(int i){
- return 2*i + 2;
- }
- private int parent(int i){
- return (i-1)/2;
- }
- public void insert(int x){
- if(size == arr.length){
- int[] temp = new int[size * 2];
- for (int i = 0; i < size; i++) {
- temp[i] = arr[i];
- }
- arr = temp;
- }
- int i = size;
- size++;
- arr[i] = x;
- bubbleUp(i);
- }
- public int getMax(){
- if(size == 0){
- //this is an error
- return -1;
- }
- return arr[0];
- }
- public int extractMax(){
- if(size == 0){
- //this is an error.
- return -1;
- }
- if(size == 1){
- size--;
- return arr[0];
- }
- int max = arr[0];
- arr[0] = arr[size - 1];
- size--;
- heapify(0);
- return max;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement