我的朋友有一个小问题,我的知识已接近尾声。他写了一个简单的QuickSort算法(他是在学校学到的),它会产生一个StackOverflow错误。我知道这意味着它在某个地方多次调用递归,但是我无法得到逻辑错误--请帮帮我!
下面是代码(我省略了一些代码,因为它只显示在两个文本区域中):
int array [] = new int [10];
...
public static void quicksort (int array[],int l,int r){
int i = l;
int j = r;
int mitte = array [(l+r)/2];
while (i<j) {
while (array[i]<mitte) {
i++;
} // end of if
while (mitte<array[i]) {
j--;
} // end of if
if (i<=j) {
int merke =array[i];
array[i] = array [j];
array [j] = merke ;
i++;
j--;
} // end of if
if (i<j) {
quicksort(array,l,j);
} // end of if
if (l<r) {
quicksort(array,l,r);
} // end of if
} // end of while
}
它的名称如下:
quicksort(array,0,9);
但是,如果我们调用它,并且两个数字是相同的,它就不会产生溢出。
如果需要更多的代码,下面是pastebin的完整代码:http://pastebin.com/cwvbwXEu
发布于 2014-01-27 10:30:28
这一呼吁:
if (l<r) {
quicksort(array,l,r);
}
使用传入的相同参数递归地调用quicksort
,而不是用较小的子问题进行调用。因此,它将无限地恢复。
发布于 2014-01-27 10:31:33
if (l<r)
quicksort(array,l,r);
我不是总是比r小吗?这将导致无限递归,这就是为什么如果两个值是相同的,则不会得到溢出。
https://stackoverflow.com/questions/21388639
复制相似问题