Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.86 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Comparator;
  3. public class BinaryHeap<K> extends Heap<K> {
  4.     private Comparator<K> comp;
  5.     public BinaryHeap(){
  6.         this(new DefaultComparator<K>());
  7.     }
  8.     public BinaryHeap(Comparator<K> comp){
  9.         array = new ArrayList<>();
  10.         this.comp = comp;
  11.     }
  12.    
  13.     private void swap(int i, int j){
  14.         K temp = array.get(i);
  15.         array.set(i,array.get(j));
  16.         array.set(j,temp);
  17.     }
  18. //    private int root(){
  19.  
  20. //    }
  21.     private int left(int i){
  22.         return 2*i+1;
  23.     }
  24.     private int right(int i){
  25.         return 2*i+2;
  26.     }
  27.     private int parent(int i){
  28.         return (i-1)/2;
  29.     }
  30.     protected boolean hasLeft(int i){
  31.         return left(i) < array.size();
  32.     }
  33.     protected boolean hasRight(int i){
  34.         return right(i) < array.size();
  35.     }
  36.     private void sink(int i){
  37.         while(hasLeft(i)){
  38.             int leftIndex = left(i);
  39.             int smallChildIndex = leftIndex;
  40.             if(hasRight(i)){
  41.                 int rightIndex = right(i);
  42.                 if(comp.compare(array.get(leftIndex),array.get(rightIndex))>0)
  43.                     smallChildIndex = rightIndex;
  44.             }
  45.             if(comp.compare(array.get(smallChildIndex),array.get(i)) >= 0)
  46.                 break;
  47.             swap(i,smallChildIndex);
  48.             i = smallChildIndex;
  49.         }
  50.     }
  51.     private void swim(int i){
  52.         while(i > 0){
  53.             int p = parent(i);
  54.             if(comp.compare(array.get(i),array.get(p)) >= 0) break;
  55.             swap(i,p);
  56.             i = p;
  57.         }
  58.     }
  59.    
  60.     public void insert(K k){
  61.         array.add(k);
  62.         swim(array.size()-1);
  63.     }
  64.  
  65.     public K removeMin(){
  66.         if(array.isEmpty()) return null;
  67.         K answer = array.get(0);
  68.         swap(0,array.size() - 1);
  69.         array.remove(array.size()-1);
  70.         sink(0);
  71.         return answer;
  72.     }
  73.     public K min(){
  74.         if(array.isEmpty()) return null;
  75.         return array.get(0);
  76.     }
  77.  
  78.     public String toString(){
  79.         String result = new String();
  80.         for (int i = 0; i < array.size(); i++){
  81.             result = result + array.get(i).toString() + " ";
  82.         }
  83.         return result;
  84.     }
  85.  
  86.     public static void main(String[] args){
  87.         BinaryHeap test = new BinaryHeap();
  88.         test.insert(5);
  89.         test.insert(7);
  90.         test.insert(6);
  91.         test.insert(9);
  92.         test.insert(3);
  93.         test.insert(8);
  94.         test.insert(2);
  95.         test.insert(1);
  96.         test.insert(4);
  97.         System.out.println(test.toString());
  98.         System.out.println(test.removeMin());
  99.         System.out.println(test.removeMin());
  100.         System.out.println(test.removeMin());
  101.         System.out.println(test.removeMin());
  102.         System.out.println(test.removeMin());
  103.         System.out.println(test.removeMin());
  104.         System.out.println(test.removeMin());
  105.         System.out.println(test.removeMin());
  106.         System.out.println(test.removeMin());
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement