[英]stackoverflow error in quicksort
所以我一直在努力实现一个快速排序,但它会产生一个stackoverflower错误,但我似乎无法找到原因。
有人能帮我吗?
public static int partition(int[] a, int p, int q){
int i = 0;
for (int j = p; j < q; ++j){
if(a[j] <= a[q]){
int tmp = a[j];
a[j] = a[i];
a[i] = tmp;
i++;
}
}
int tmp = a[i];
a[i] = a[q];
a[q] = tmp;
return i;
}
public static void qsort(int[] a, int p, int q){
if(p < q){
int x = partition(a, p, q);
qsort(a, p, x - 1);
qsort(a, x + 1, q);
}
}
public static void main(String args[]){
int[] a = {4, 6, 2, 9, 8, 23, 0, 7};
qsort(a, 0, a.length - 1);
for(int i : a){
System.out.print(i + " ");
}
}
堆栈溢出错误意味着永远不会达到递归的停止条件,在这种情况下p < q
永远不会为真。 使用调试器,为该行设置断点,并查找使用相同参数重复递归调用qsort()
时间。
有几个错误,但你正在击中的直接错误是在partition()
, i
不限制在p
和q
之间。 你很快就会陷入p=2
, q=3
但i
的最终值为1
。 这会导致无限递归,因为qsort()
一直使用相同的参数调用自身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.