Guten Tag liebe Freunde der Javaprogrammierung.
Ich muss aktuell den Mergesortalgorithmus in Java implementieren unter zuhilfenahme von Arraylisten. Soweit ist der Algorithmus nicht schwer, doch sitze sich seit einigen Stunden an dem Problem, das nach dem ausführen von mergeSortInt() auf das übergebene Array, dies mit der Größe 0 und ohne Inhalt wieder zurückgegeben wird. Ich finde partout nicht den Grund dafür.
Edit: Zum testen erzeuge Ich eine Arrayliste mit 50 Zufallszahlen(int) die Ich der Methode übergebe. Diese kommen im Programm auch korrekt an.
Ich muss aktuell den Mergesortalgorithmus in Java implementieren unter zuhilfenahme von Arraylisten. Soweit ist der Algorithmus nicht schwer, doch sitze sich seit einigen Stunden an dem Problem, das nach dem ausführen von mergeSortInt() auf das übergebene Array, dies mit der Größe 0 und ohne Inhalt wieder zurückgegeben wird. Ich finde partout nicht den Grund dafür.
Edit: Zum testen erzeuge Ich eine Arrayliste mit 50 Zufallszahlen(int) die Ich der Methode übergebe. Diese kommen im Programm auch korrekt an.
Java:
import java.math.BigInteger;
import java.util.ArrayList;
public class Mergesort {
public static void sortInt(ArrayList<Integer> array) {
//Hier ist die Arraygröße noch korrekt.
array = mergeSortInt(array);
//Hier ist die Arraygröße = 0, demzufolge auch ohne Inhalt
}
public static void sortBig(ArrayList<BigInteger> array) {
}
public static ArrayList<Integer> mergeSortInt (ArrayList<Integer> array) {
int p = (array.size() / 2);
int x = 0;
ArrayList<Integer> links = new ArrayList<Integer>(p);
ArrayList<Integer> rechts = new ArrayList<Integer>(p);
if (array.size() > 1) {
for (int i = 0; i < array.size() / 2; i++) {
links.add(i, array.get(i)); //Erzeugt linke Teilliste
} // Ende for-Schleife zum erzeugen der linken Liste
for (int i = array.size(); i < (array.size() - 1); i++) {
rechts.add(x, array.get(i)); //Erzeugt rechte Teilliste
x++;
} // Ende for-Schleife zum erzeugen der rechten Liste
links = mergeSortInt(links);
rechts = mergeSortInt(rechts); //Teillisten via MErgesort sortieren
array = mergeInt(links,rechts); //danach Teillisten zusammenfügen
return array;
} // Ende if
else{
return array;
}
}
public static ArrayList mergeInt (ArrayList<Integer> links, ArrayList<Integer> rechts){
int gesamt = links.size() + rechts.size();
ArrayList<Integer> sortiert = new ArrayList<Integer>(gesamt);
int left = 0;
int right = 0;
for (int i = 0; i < gesamt - 1; i++) {
if (links.get(left) >= rechts.get(right)) {
sortiert.add(i, rechts.get(right)); //Falls aktuelles Listenelement rechts > links, füge rechtes Element in neue Liste ein
right++;
}
else{
sortiert.add(i, links.get(left)); //ansonsten das Linke
left++;
} // Ende else
} //Ende for
return sortiert;
}
}
Zuletzt bearbeitet: