Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.44 KB | None | 0 0
  1. import material.u03.IMaxHeap;
  2. import java.lang.reflect.Array;
  3.  
  4.  
  5. public class MaxHeap<T extends Comparable<T>> implements IMaxHeap<T> {
  6.    
  7.     private boolean init=true;
  8.     private T[] array;
  9.     private int capacity;
  10.    
  11.     public MaxHeap(int capacity){
  12.         this.capacity=capacity+1;
  13.     }
  14.  
  15.     @Override
  16.     public int capacity() {
  17.         if(init){
  18.         return 0;  
  19.         }else
  20.         return array.length-1;
  21.     }
  22.  
  23.     @Override
  24.     public T extractMax() {
  25.         int n = size();
  26.         if(size()<=(capacity()/4) && n>0){//Halbieren falls zu leer
  27.             this.capacity=((capacity+1)/2);
  28.             int elements = size();
  29.             T[] smallarray = (T[]) Array.newInstance(array[1].getClass(), this.capacity);
  30.             System.arraycopy(array, 1, smallarray, 1, elements);
  31.             array = (T[]) Array.newInstance(smallarray[1].getClass(), this.capacity);
  32.             System.arraycopy(smallarray, 1, array, 1, elements);
  33.         }
  34.         if(n>0){
  35.             T a = array[1];
  36.             array[1]=array[n];
  37.             array[n]=null;
  38.             n--;
  39.             int i=1;
  40.             T b = array[i];
  41.             int j =2*i;
  42.             while(j<=n){
  43.                 if((j<n)&&(array[j+1].compareTo(array[j])>0)){
  44.                     j++;
  45.                 }
  46.                 if(b.compareTo(array[j])<0){
  47.                     array[i]=array[j];
  48.                     i=j;
  49.                     j=2*i;
  50.                 }else{
  51.                     j=n+1;
  52.                 }
  53.             }
  54.             array[i]=b;
  55.             return a;          
  56.         }else{
  57.             System.out.println("Heap ist leer");
  58.             return null;
  59.         }
  60.     }
  61.  
  62.     @Override
  63.     public T insert(T t) {
  64.         if(init){
  65.         array = (T[]) Array.newInstance(t.getClass(), this.capacity);
  66.         init=false;
  67.         }
  68.         int i = size()+1;
  69.         if(i>capacity()){ //Array vergrößern falls voll
  70.             this.capacity=(capacity*2)-1;
  71.             int elements = size();
  72.             T[] bigarray = (T[]) Array.newInstance(t.getClass(), this.capacity);
  73.             System.arraycopy(array, 1, bigarray, 1, elements);
  74.             array = (T[]) Array.newInstance(t.getClass(), this.capacity);
  75.             System.arraycopy(bigarray, 1, array, 1, elements);
  76.         }
  77.         while(i>1 && (array[(int) Math.floor(i/2)].compareTo(t)<0)){
  78.             array[i]=array[(int) Math.floor(i/2)];
  79.             i=(int) Math.floor(i/2);
  80.         }
  81.         array[i]=t;
  82.         return array[i];
  83.     }
  84.  
  85.     @Override
  86.     public boolean isEmpty() {
  87.         if(init){
  88.             return true;
  89.         }else
  90.         for(int i=1;i<array.length;i++){
  91.             if(array[i]!=null){
  92.                 return false;
  93.             }
  94.         }
  95.         return true;
  96.     }
  97.  
  98.     @Override
  99.     public T max() {
  100.         if(init){
  101.             return null;
  102.         }else
  103.         return array[1];
  104.     }
  105.  
  106.     @Override
  107.     public int size() {
  108.         if(init){
  109.             return 0;
  110.         }else
  111.            
  112.         for(int i=1;i<array.length;i++){
  113.             if(array[i]==null){
  114.                 return i-1;
  115.             }
  116.         }
  117.         return array.length-1;
  118.     }
  119.  
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement