【发布时间】:2023-03-18 22:36:01
【问题描述】:
问题是,它是一个永无止境的递归。我不知道,我怎样才能完成递归。有趣的是,它有效,如果我打印 arraylist (mergedArray),它将在一些迭代后排序,但函数永远不会停止。 错误信息是:
“在 javaapplication9.QuickSort.simple_quick_sort(QuickSort.java:40)”
以下代码:
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;
}
【问题讨论】:
-
您需要对
left和right部分进行排序并合并它们,而不是(再次)合并整个数组。 -
注意 simple_quick_sort(mergedArray) 无论如何都会被调用,所以它会一直循环
-
pivot 应该是突出的,它不参与后续的排序。你应该确保你先了解快速排序。
标签: java recursion stack-overflow quicksort