Easy Coding
  Forum Wiki Tagging Projekte Karte RSS
» Start
» All Recent Changes
» Wiki Suche
» Wiki Hilfe

Algorithmen

How To's Informationen

edit SideBar

Neue Wiki Eintrage finden Sie unter easy-coding.de/wiki.

Heapsort

Beispiel

heapsort.java
  1. // vertauscht in einem Array die Einträge mit Index x und y
  2. private static void vertausche(int[] a, int x, int y) {
  3.   int z = a[x]; a[x] = a[y]; a[y] = z;
  4. }
  5.  
  6. // versickert im Array mit Länge n das Element mit Index i
  7. private static void versickere(int[] a, int n, int i) {
  8.   while (i <= n/2) {
  9.     int ln = 2*i;              // linker Nachfolger
  10.     if (ln < n)                // hat der Knoten einen rechten Nachfolger, und
  11.      if (a[ln+1] > a[ln])      // ist der größer als der linke?
  12.       ln++;                    // dann benutze den rechten, sonst den linken Nachfolger
  13.     if (a[ln] > a[i]) {
  14.       vertausche(a, i, ln);    // vertausche mit größerem Nachfolger
  15.       i = ln;                  // versickere weiter
  16.     }
  17.     else {                     // beide Nachfolger sind kleiner als das Element, kann nicht
  18.       i = n;                   // weiter versickern: Beende Schleife
  19.     }
  20.   }
  21. }
  22.  
  23. // überführt ein Array in einen Heap
  24. private static void überführeInHeap(int[] a, int n) {
  25.   for (int i = n/2; i >= 1; i--) {     // starte von der Mitte aus rückwärts
  26.     versickere(a, n, i);
  27.   }
  28. }
  29.  
  30. // sortiert ein Array von ganzen Zahlen
  31. public static void heapSort(int[] a, int n) {
  32.   überführeInHeap(a, n);       // stelle Heap-Eigenschaft her
  33.   for (int i = n; i >= 0; i--) {
  34.     vertausche(a, 1, i);       // vertausche 1. mit letztem unsortierten Element
  35.     versickere(a, i-1, 1);     // stelle Heap-Eigenschaften für Rest-Array her
  36.   }
  37. }
Zuletzt geändert am 19.11.2006 16:50 Uhr
  Impressum