【发布时间】:2014-02-09 21:08:56
【问题描述】:
我正在尝试使用 ArrayList 实现快速排序算法,但似乎无法使其正常工作。它给了我在 sort() 函数中的递归返回调用的错误。请帮忙!
这是我得到的错误:线程“main”java.lang.StackOverflowError中的异常
public static void main(String[] args) {
List<Integer> l = new ArrayList<Integer>();
l.add(10); l.add(7); l.add(13); l.add(22); l.add(9);
//l.get(2);
System.out.println(sort(l));
}
public static List<Integer> sort(List<Integer> l) {
if (l.size() <= 1) {
return l;
}
int pivot = l.get(0);
List<Integer> left = new ArrayList<Integer>();
List<Integer> right = new ArrayList<Integer>();
for (int i = 0; i < l.size(); i++) {
if (l.get(i) < pivot) {
left.add(l.get(i));
//System.out.println(left);
} else {
right.add(l.get(i));
}
}
return join(sort(left), sort(right), pivot);
}
public static List<Integer> join(List<Integer> left, List<Integer> right, int pivot) {
List<Integer> l = new ArrayList<Integer>();
for (int i = 0; i < left.size(); i++) {
l.add(left.get(i));
}
l.add(pivot);
for (int i = l.size(); i < right.size(); i++) {
l.add(right.get(i));
}
return l;
}
}
【问题讨论】:
-
它会给你什么错误?
-
@CraigOtis 线程“main”中的异常 java.lang.StackOverflowError
-
我认为这是一个学习使用调试器的好机会!
-
你试过调试你的排序方法吗?在实现分而治之的搜索算法时,堆栈溢出通常是一个错误,您使用相同的参数重复调用
sort()方法,通常是在您接近递归的“叶子”时。
标签: java sorting recursion arraylist quicksort