G
Guest
Gast
Hey Leute... also nachdem ich jetzt schon seit über einer Woche dran sitze und den Fehler suche hab ich mich entschlosse das ganze mal hier zu posten...
Also ich habe den QuickSort - Algorithmus von Wikipedia in Java umgesetzt (also den Pseudocode)
Siehe: http://de.wikipedia.org/wiki/Quicksort
Eigentlich war dabei kein Problem... den Algorithmus an sich habe ich verstanden und auch sonst war eigentilch alles easy
Natürlich wollte ich das ganze auch testen und habe gleich ein Programm dazu geschrieben... im Average-Case (also wenn das Feld zufällige Zahlen beinhaltet) klappt alles super... die Zahlen werden richtig sortiert und alles ist bestens...
Das Problem taucht jetzt komischerweise beim Best-Case auf (wenn alle Zahlen in der richtigen Reihenfolge sind...)
Ich kann das Feld mit den Zahlen nicht größer als 10000 machen, da mir Java ansonsten die Fehlermeldung:
ausgibt... ich bin echt am verzweifeln, das macht er nämlich nur beim Best-Case... ich häng mal mein Code an...
Die Methode QuickSort...
Die Methode teile
Die Methode Swap vertauscht zwei Felder miteinander
Aus der Main-Methode wird QuickSort aufgerufen... hier zwei Auszüge aus meiner Main-Methode, die die Feldbelegung verdeutlichen, sowie den Aufruf der Methode QuickSort
Hat irgendwer eine Ahnung wo sich der Fehler versteckt hat?! Ich wär demjenigen echt so dermaßen dankbar...
Also ich habe den QuickSort - Algorithmus von Wikipedia in Java umgesetzt (also den Pseudocode)
Siehe: http://de.wikipedia.org/wiki/Quicksort
Eigentlich war dabei kein Problem... den Algorithmus an sich habe ich verstanden und auch sonst war eigentilch alles easy
Natürlich wollte ich das ganze auch testen und habe gleich ein Programm dazu geschrieben... im Average-Case (also wenn das Feld zufällige Zahlen beinhaltet) klappt alles super... die Zahlen werden richtig sortiert und alles ist bestens...
Das Problem taucht jetzt komischerweise beim Best-Case auf (wenn alle Zahlen in der richtigen Reihenfolge sind...)
Ich kann das Feld mit den Zahlen nicht größer als 10000 machen, da mir Java ansonsten die Fehlermeldung:
Exception in thread "main" java.lang.StackOverflowError
ausgibt... ich bin echt am verzweifeln, das macht er nämlich nur beim Best-Case... ich häng mal mein Code an...
Die Methode QuickSort...
Code:
public static int[] QuickSort (int daten[],int links,int rechts) {
if (links < rechts) {
int teiler = teile (daten,links,rechts);
QuickSort (daten,links,teiler-1);
QuickSort (daten,teiler+1,rechts);
}
return daten;
} //QuickSort
Die Methode teile
Code:
private static int teile (int daten[],int links,int rechts) {
int i = links;
int j = rechts-1;
int pivot = daten[rechts];
while (i < j) {
while ((daten[i]<=pivot) && (i<rechts))
i++;
while ((pivot<=daten[j])&& (j>links))
j--;
if (i<j)
Swap (daten,i,j);
}
if (daten[i]>pivot)
Swap (daten,i,rechts);
return i;
}
Die Methode Swap vertauscht zwei Felder miteinander
Code:
private static int[] Swap (int daten[], int eins, int zwei) {
int hilfe=daten[eins];
daten[eins] = daten[zwei];
daten[zwei] = hilfe;
return daten;
}
Aus der Main-Methode wird QuickSort aufgerufen... hier zwei Auszüge aus meiner Main-Methode, die die Feldbelegung verdeutlichen, sowie den Aufruf der Methode QuickSort
Code:
int[] feld;
feld = new int[10000];
for (int i=0;i<=feld.length-1;i++)
feld[i]=i;
feld = QuickSort(feld,0,feld.length-1);
Hat irgendwer eine Ahnung wo sich der Fehler versteckt hat?! Ich wär demjenigen echt so dermaßen dankbar...