Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Algorithmen (http://www.informatikerboard.de/board/board.php?boardid=17)
----- Heapsort (http://www.informatikerboard.de/board/thread.php?threadid=2329)


Geschrieben von Batista am 04.06.2015 um 17:52:

  Heapsort

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
import java.util.Arrays;
public class HeapSort {
 public static class  SortUtil {

public static void vertausche ( int [] a, int x, int st) {
 int y = a[x];
 a[x]=a[st];
 a[st]= y;
}



 /** Array of int sortieren mittels HeapSort */
  public static void sort(int[] daten) {
    // Heap erzeugen (Bottom-Up)
    for (int i = daten.length / 2 - 1; i >= 0; --i) {
      korrigiere(daten, i, daten.length);
    }
    // Heap auslesen bis er leer ist:
    for (int i = daten.length - 1; i > 0; --i) {
      SortUtil.vertausche(daten, 0, i);
      korrigiere(daten, 0, i);
    }
  }

  /** Heap an der Position i korrigieren */
  public static void korrigiere(int[] daten, int i, int len) {

int a = i+1 , g;
while (2*i<= len) {
g=2*a;
if ( g< len)
if ( daten[g-1]>daten[g])
g++;
if ( daten[a-1]> daten[g-1]){
SortUtil.vertausche(daten, a-1, g-1);
g=a;
}
else
break;
}
}
  
}
public static void main (String [] args) {

int[] testarray =  {-1,-2};
		sort(testarray);
                System.out.println(Arrays.toString(testarray));
	}
}




Fehler, bei der Ausführung"The method sort(int[]) is undefined for the type HeapSort".
Weshalb ist die Methode sort nicht definiert für int [] ?



Geschrieben von eulerscheZahl am 04.06.2015 um 18:00:

 

code:
1:
SortUtil.sort(testarray);


Und der Code wird leserlicher, wenn man ihn formatiert. Die Standardprogramme (eclipse, NetBeans) haben das beide eingebaut. Ich habe es so eingestellt, dass der Code beim Speichern automatisch formatiert wird.



Geschrieben von Batista am 04.06.2015 um 18:09:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
import java.util.Arrays;
public class HeapSort {
 public static class  SortUtil {

public static void vertausche ( int [] a, int x, int st) {
 int y = a[x];
 a[x]=a[st];
 a[st]= y;
}
}


 /** Array of int sortieren mittels HeapSort */
  public static void sort(int[] daten) {
    // Heap erzeugen (Bottom-Up)
    for (int i = daten.length / 2 - 1; i >= 0; --i) {
      korrigiere(daten, i, daten.length);
    }
    // Heap auslesen bis er leer ist:
    for (int i = daten.length - 1; i > 0; --i) {
      SortUtil.vertausche(daten, 0, i);
      korrigiere(daten, 0, i);
    }
  }

  /** Heap an der Position i korrigieren */
  public static void korrigiere(int[] daten, int i, int len) {

int a = i+1 , g;
while (2*i<= len) {
g=2*a;
if ( g< len)
if ( daten[g-1]>daten[g])
g++;
if ( daten[a-1]> daten[g-1]){
SortUtil.vertausche(daten, a-1, g-1);
g=a;
}
else
break;
}
}
  

public static void main (String [] args) {

int[] testarray =  {7, 9, 5, 6, 4, 0, 1, 1, 9, 8};
		sort(testarray);
                System.out.println(Arrays.toString(testarray));
	}
}



Eclipse führt den Code aus, aber es kommt das falsche Ergebnis.
Der complier meint die Main kann nicht geladen werden.



Geschrieben von eulerscheZahl am 04.06.2015 um 18:14:

 

Die falsche Sortierung kann ich bestätigen, die Compilerwarnung nicht.
Genaue Fehlermeldung?



Geschrieben von Batista am 04.06.2015 um 18:16:

 

Fehler: Hauptklasse Heapsort konnte nicht gefunden oder geladen werden


Hast du eine Idee, wieso es falsch sortiert?



Geschrieben von eulerscheZahl am 04.06.2015 um 18:35:

 

Da müsste ich mich auch erst einlesen, wie Heapsort arbeitet.

Bei der Fehlermeldung hast du vielleicht in eclipse etwas falsch eingestellt, der Kommandozeilencompiler hat keine Probleme.



Geschrieben von Batista am 04.06.2015 um 18:38:

 

Ich hab statt HeapSort stets Heapsort eingetippt, damit läuft es


Forensoftware: Burning Board, entwickelt von WoltLab GmbH