Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Heapsort » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Heapsort
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Batista
unregistriert
Heapsort Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 [] ?
04.06.2015 17:52
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
04.06.2015 18:00 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Batista
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
04.06.2015 18:09
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
04.06.2015 18:14 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Batista
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Fehler: Hauptklasse Heapsort konnte nicht gefunden oder geladen werden


Hast du eine Idee, wieso es falsch sortiert?
04.06.2015 18:16
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
04.06.2015 18:35 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Batista
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich hab statt HeapSort stets Heapsort eingetippt, damit läuft es
04.06.2015 18:38
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Heapsort