Advertisement
ultravibez

Heapsort

Oct 19th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.14 KB | None | 0 0
  1.  
  2. package com.company;
  3.  
  4. public class MaxHeap {
  5.  
  6.     private int[] arr;
  7.     private int size;
  8.  
  9.     public MaxHeap(){
  10.         arr = new int[100];
  11.         size = 0;
  12.     }
  13.  
  14.     public MaxHeap(int[] arr){
  15.         this.arr = arr;
  16.         size = arr.length;
  17.         for (int i = size/2; i >= 0; i--) {
  18.             heapify(i);
  19.         }
  20.     }
  21.  
  22.     public int getSize() {
  23.         return size;
  24.     }
  25.  
  26.     private void heapify(int i){
  27.         int largest = i;
  28.         int l = leftChild(i);
  29.         int r = rightChild(i);
  30.         if(l<size && arr[l] > arr[largest])
  31.             largest = l;
  32.         if(r<size && arr[r] > arr[largest])
  33.             largest = r;
  34.         if(largest != i){
  35.             int temp = arr[i];
  36.             arr[i] = arr[largest];
  37.             arr[largest] = temp;
  38.             heapify(largest);
  39.         }
  40.     }
  41.  
  42.     private void bubbleUp(int i){
  43.         int p;
  44.         //while I am not the root and I am greater than
  45.         //my parent
  46.         while(i!=0 && arr[(p=parent(i))] < arr[i]){
  47.             int temp = arr[i];
  48.             arr[i] = arr[p];
  49.             arr[p] = temp;
  50.             i = p;
  51.         }
  52.     }
  53.  
  54.     private int leftChild(int i){
  55.         return 2*i + 1;
  56.     }
  57.     private int rightChild(int i){
  58.         return 2*i + 2;
  59.     }
  60.  
  61.     private int parent(int i){
  62.         return (i-1)/2;
  63.     }
  64.  
  65.     public void insert(int x){
  66.         if(size == arr.length){
  67.             int[] temp = new int[size * 2];
  68.             for (int i = 0; i < size; i++) {
  69.                 temp[i] = arr[i];
  70.             }
  71.             arr = temp;
  72.         }
  73.         int i = size;
  74.         size++;
  75.         arr[i] = x;
  76.         bubbleUp(i);
  77.     }
  78.  
  79.     public int getMax(){
  80.         if(size == 0){
  81.             //this is an error
  82.             return -1;
  83.         }
  84.         return arr[0];
  85.     }
  86.     public int extractMax(){
  87.         if(size == 0){
  88.             //this is an error.
  89.             return -1;
  90.         }
  91.         if(size == 1){
  92.             size--;
  93.             return arr[0];
  94.         }
  95.         int max = arr[0];
  96.         arr[0] = arr[size - 1];
  97.         size--;
  98.         heapify(0);
  99.         return max;
  100.     }
  101.  
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement