我正在尝试用Java编写快速排序算法,当我尝试运行它时遇到了一些问题。
public static <T extends ICompare<T>> void quicksort(T[] a, int start, int end) {
start = 0;
end = a.length - 1;
int i = start;
int k = end;
if (end - start >= 1) {
T pivot = a[start];
while (k > i) {
while (a[i].lesserEqual(pivot) && i <= end && k > i) {
i++;
}
while (a[k].greaterEqual(pivot) && k >= start && k >= i) {
k--;
}
if (k > i) {
swap(a, i, k);
}
}
swap(a, start, k);
quicksort(a, start, k - 1);
quicksort(a, k + 1, end);
} else {
return;
}
}
当我尝试运行它时,控制台会说出一些关于Stackoverflow的信息:
Exception in thread "main" java.lang.StackOverflowError
at tests.Data.getValue(Data.java:14)
at tests.Data.lesserEqual(Data.java:31)
at tests.Data.lesserEqual(Data.java:1)
at algo.Sort.quicksort(Sort.java:29)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
我确信我在其中一个while循环中做错了,但我看不出它是什么?
感谢您的帮助
答案 0 :(得分:2)
开始时你正在这样做:
start = 0;
end = a.length - 1;
每次调用方法时,都会通过参数重写其值,因此您的快速排序永远不会结束。并且因为它永远不会结束,所以它会一次又一次地被递归调用,经过一段时间后,保存有关另一个方法的信息的堆栈会溢出,并且会出现异常。