Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.71 KB | None | 0 0
  1. Heap.java:
  2. public class Heap <T extends Comparable<T>> {
  3.     public T[] element;
  4.     public Heap(T[] elem) {
  5.         element = elem;
  6.         endIndex = element.length-1;
  7.     }
  8.     private int aktuellerIndex = 0;
  9.     private int endIndex;
  10.     private int root = 0;
  11.     public void heapify() {
  12.         heapify(element, aktuellerIndex, endIndex);
  13.     }
  14.     // Heapify        
  15.     public void heapify(T[] element, int aktuellerIndex,int endIndex,int root){
  16.         int largest;
  17.         int left = aktuellerIndex + (root - aktuellerIndex)*2 + 1;
  18.         int right = left + 1;
  19.         if(left <= endIndex && element[left].compareTo(element[root]) > 0)
  20.             largest = left;
  21.         else
  22.             largest = right;
  23.         if(right <= endIndex && element[right].compareTo(element[largest]) > 0)
  24.             largest = right;
  25.         if(largest != root)
  26.             swap(root, largest);
  27.             heapify(element, aktuellerIndex, endIndex,largest);
  28.     }
  29.     // Swap
  30.     public void swap(int root, int largest){
  31.         T temp = element[largest];
  32.         element[largest] = element[root];
  33.         element[root] = temp;
  34.     }
  35.     // Erstellt den Heap    
  36.     public void heapify(T[] element, int aktuellerIndex, int endIndex) {
  37.         int length = endIndex - aktuellerIndex +1;
  38.         for(int i = aktuellerIndex + length/2 - 1; i>=aktuellerIndex; i--) {
  39.             heapify(element, aktuellerIndex, endIndex, i);
  40.         }
  41.     }
  42.     // Heapsort
  43.     public void heapSort(T[] element, int aktuellerIndex, int endIndex) {
  44.         for(int i = endIndex; i> aktuellerIndex; i--) {
  45.             swap(aktuellerIndex, i);
  46.             heapify(element, aktuellerIndex, i-1, aktuellerIndex);            
  47.         }
  48.     }
  49.     // Print
  50.     void printHeap() {
  51.         for(int i=0; i < element.length; i++) {
  52.             System.out.println(element[i]);
  53.         }
  54.     }
  55. }
  56. TestKlasse.java:
  57. public class TestKlasse {
  58.    
  59.     public static void main(String [] args) {
  60.        
  61.         //List<Integer> list = new ArrayList<Integer>(Arrays.asList( new Integer[]{1,2,3,4,5,6,7}));
  62.         Integer[] test;
  63.         test = new Integer[3];
  64.         test[0] = new Integer(1);
  65.         test[1] = new Integer(2);
  66.         test[2] = new Integer(3);
  67.        
  68.         Heap a = new Heap(test);
  69.         a.printHeap();
  70.         a.heapify();
  71.         a.printHeap();
  72.     }
  73. }
  74.        
  75.   Errors:
  76.   [lalala]$ java TestKlasse
  77. 1
  78. 2
  79. 3
  80. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
  81.         at Heap.swap(Heap.java:36)
  82.         at Heap.heapify(Heap.java:30)
  83.         at Heap.heapify(Heap.java:31)
  84.         at Heap.heapify(Heap.java:45)
  85.         at Heap.heapify(Heap.java:15)
  86.         at TestKlasse.main(TestKlasse.java:17)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement