问题是,这是一个无休止的递归。我不知道,我怎么能完成递归。有趣的是,它工作,如果我打印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;
}
答案 0 :(得分:0)
public ArrayList<Integer> simple_quick_sort(ArrayList<Integer> arr) {
if (arr.size() <= 1) {
return arr;
}
else {
ArrayList<Integer> mergedArray = new ArrayList<Integer>();
ArrayList<Integer> left = new ArrayList<Integer>();
ArrayList<Integer> right = new ArrayList<Integer>();
int pivot = arr.get(0);
for (int i = 0; i < arr.size(); i++) {
if (arr.get(i) < pivot) {
left.add(arr.get(i));
left = simple_quick_sort(left);
}
else {
right.add(arr.get(i));
right = simple_quick_sort(right);
}
}
}
mergedArray.addAll(left);
mergedArray.addAll(right);
}
当然,复制与快速排序的基本思想相反,后者很好,因为它可以在要排序的阵列上工作,而不需要这些复制操作和存储分配。
答案 1 :(得分:0)
对不起,但是你的快速排序的整个实现有点不对劲。此外,在递归函数内部使用循环否定了使用递归的好处。如果你想实现那个循环,我建议你将它嵌套在另一个循环中以使代码更简单(不会像递归一样有效)。
如果您想继续此计划,请尝试进行以下更改: 当你写
simple_quick_sort(mergedArray);
return mergedArray;
您没有使用函数返回的值。您只是调用函数并且对返回的值不执行任何操作。在此代码工作之前,可能还有更多事情需要修复。 如果您想了解有关快速排序和递归的更多信息,我找到了此页http://www.geeksforgeeks.org/quick-sort/
我希望这有帮助!