Advertisement
Guest User

HeapSort

a guest
Nov 12th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. package ch.ffhs.dua.sort;
  2.  
  3. import java.util.Arrays;
  4.  
  5. public class HeapSort
  6. {
  7. /**
  8. * Sortiert ein Array mit Heapsort.
  9. * @param array
  10. */
  11. public static void sort(int[] array)
  12. {
  13. sort(array, 0, array.length);
  14. }
  15.  
  16. /**
  17. * Sortiert ein Teilstück eines Array s mit Heapsort.
  18. * @param array
  19. * @param start Index des ersten Elementes des zu sortierenden Teils.
  20. * @param start Index des letzten Elementes des zu sortierenden Teils.
  21. */
  22. public static void sort(int[] array, int start, int end)
  23. {
  24. for (int i = end/2 - 1; i >= start; i--){
  25. makeHeap(array, i, end);
  26. }
  27.  
  28. for (int i = end - 1; i >= 0; i--){
  29. int sub = array[start];
  30. array[0] = array[i];
  31. array[i] = sub;
  32.  
  33. makeHeap(array, 0 , i);
  34. }
  35. }
  36.  
  37. /**
  38. * Erzeugt aus einem angegebenen Teilstück einen Heap.
  39. * @param array
  40. * @param start Index des ersten Elementes, aus dem ein Heap erzeugt werden sollte.
  41. * Das ist auch der Index der Wurzel des Heaps; die Kinder der Wurzel
  42. * liegen dann an den Position start+1 und start+2.
  43. * @param end Index des letzten Elementes des Stücks, aus dem ein Heap erzeugt werden sollte.
  44. */
  45. public static void makeHeap(int[] array, int start, int end)
  46. {
  47. // TODO
  48. int largest = start;
  49. int left = 2 * start + 1;
  50. int right = 2 * start + 2;
  51.  
  52. if (left < end && array[left] > array[largest]){
  53. largest = left;
  54. }
  55.  
  56. if (right < end && array[right] > array[largest]){
  57. largest = right;
  58. }
  59.  
  60. if (largest != start){
  61. int sub = array[start];
  62. array[start] = array[largest];
  63. array[largest] = sub;
  64. makeHeap(array, largest, end);
  65. }
  66. }
  67.  
  68. /**
  69. * Hilfsmethode für Heapsort:
  70. * Aus einem Teilstück eines Arrays mit den Grenzen start und end
  71. * sollte ein Heap erzeugt werden. Für Indices grösser als index
  72. * sei die Heap-Eigenschaft bereits erfüllt.
  73. * Die Methode ordnet das Stück zwischen index und end so um,
  74. * dass die Heapeigenschaft für alle Elemente erfüllt ist.
  75. * @param array
  76. * @param start
  77. * @param end
  78. * @param index
  79. */
  80. static void sink(int[] array, int start, int end, int index)
  81. {
  82. // TODO (Implementieren Sie diese Methode, wenn Sie sie für die Sort-Methoden brauchen.
  83. }
  84.  
  85. /**
  86. * Entfernt das Wurzelelement eines Heaps, baut den Heap um,
  87. * so dass er nach dem Entfernen wieder ein Heap ist (mit einem Element weniger),
  88. * und setzt das ehemalige Wurzelelement an die vormals letzte Stelle im Heap
  89. * (die nun nicht mehr zum Heap gehört).
  90. * @param array Ein Array, das als Teilstück einen heap enthält.
  91. * @param start Indes der Wurzel des heaps
  92. * @param end Index des letzten Heap-Elements.
  93. */
  94. public static void removeHeapRoot(int[] array, int start, int end)
  95. {
  96. // TODO (Implementieren Sie diese Methode, wenn Sie sie für die Sort-Methoden brauchen.
  97. }
  98.  
  99. /**
  100. * Berechnet den Index des linken Kindelementes in einem Heap.
  101. * @param parentIndex
  102. * @param offset Offset für Heap-Eigenschaft: entspricht
  103. * dem Index der Heapwurzel - 1
  104. * @return Index des linken Kindes
  105. */
  106. static int leftChild(int parentIndex, int offset)
  107. {
  108. return 2 * parentIndex - offset;
  109. }
  110.  
  111. /**
  112. * Berechnet den Index des rechten Kindelementes in einem Heap.
  113. * @param parentIndex
  114. * @param offset Offset für Heap-Eigenschaft: entspricht
  115. * dem Index der Heapwurzel - 1
  116. * @return Index des rechten Kindes
  117. */
  118. static int rightChild(int parentIndex, int offset)
  119. {
  120. return leftChild(parentIndex, offset) + 1;
  121. }
  122.  
  123. public static void main(String args[])
  124. {
  125. int array[] = {234, 4123, 43, 123, 45, 3, 1, 43};
  126.  
  127. HeapSort ob = new HeapSort();
  128. ob.sort(array);
  129.  
  130. System.out.println("Sorted array is");
  131. for (int i = 0; i < array.length; i++){
  132. System.out.println(array[i]);
  133. }
  134. }
  135.  
  136.  
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement