Das Problem ist, es ist eine nie endende Rekursion. Ich weiß nicht, wie kann ich die Rekursion beenden. Das komische ist, es funktioniert, wenn ich die arraylist (mergedArray) drucke, wird es nach einer Iteration sortiert, aber die Funktion hört nie auf. Die Fehlermeldung lautet:Wie kann ich meine Java-Schnellsortierung reparieren?
"bei javaapplication9.QuickSort.simple_quick_sort (QuickSort.java:40)"
Der folgende Code:
public ArrayList<Integer> simple_quick_sort(ArrayList<Integer> arr) {
ArrayList<Integer> mergedArray = new ArrayList<Integer>();
ArrayList<Integer> left = new ArrayList<Integer>();
ArrayList<Integer> right = new ArrayList<Integer>();
if (arr.size() <= 1) {
return arr;
}
else {
int pivot = arr.get(0);
for (int i = 0; i < arr.size(); i++) {
if (arr.get(i) < pivot) {
left.add(arr.get(i));
}
else {
right.add(arr.get(i));
}
}
}
mergedArray.addAll(left);
mergedArray.addAll(right);
simple_quick_sort(mergedArray);
return mergedArray;
}
Sie müssen die Abschnitte "links" und "rechts" sortieren und diese zusammenführen, nicht (wieder) das gesamte zusammengefügte Array. – laune
Beachten Sie, dass simple_quick_sort (mergedArray) egal was aufgerufen wird, so dass es immer Schleife – DHall
Pivot sollte hervorragend sein und es nicht in die anschließende Sortierung teilnehmen. Sie sollten sicherstellen, dass Sie Quicksort zuerst verstehen. – HuStmpHrrr