Java 给出堆栈溢出错误的简单快速排序算法?

Java 给出堆栈溢出错误的简单快速排序算法?,java,quicksort,stack-overflow,Java,Quicksort,Stack Overflow,我的朋友有个小问题,我已经不知道了。他写了一个简单的(他在学校得到的)快速排序算法,它产生了一个堆栈溢出错误。我知道这意味着它在某个地方多次调用自身递归,但我无法得到逻辑错误-请帮助我 下面是代码(我省略了一些代码,因为它们仅在两个文本区域中显示): 但是,如果我们调用它,并且两个数字相同,则不会产生溢出 如果需要更多代码,以下是pastebin上的完整代码:此调用: if (l<r) { quicksort(array,l,r); } if(lif(l首先,这里有一个无限循环: w

我的朋友有个小问题,我已经不知道了。他写了一个简单的(他在学校得到的)快速排序算法,它产生了一个堆栈溢出错误。我知道这意味着它在某个地方多次调用自身递归,但我无法得到逻辑错误-请帮助我

下面是代码(我省略了一些代码,因为它们仅在两个文本区域中显示):

但是,如果我们调用它,并且两个数字相同,则不会产生溢出

如果需要更多代码,以下是pastebin上的完整代码:

此调用:

if (l<r) {
  quicksort(array,l,r);
}

if(l
if(l首先,这里有一个无限循环:

while  (mitte<array[i]) {
    j--;
  } // end of if
在递归中,您总是需要缩短称为自己的范围,否则它将是无限的。我还没有弄清楚您在做什么,但我认为您的意思是:

if (i<r) {
   quicksort(array,i,r);
 } // end of if

if(当然了!为我的愚蠢感到抱歉XD-感谢您的快速帮助!这似乎是我的朋友犯的一个简单的从板上复制错误。谢谢。还要注意递归不应该在while循环中。快速排序是(1)将数组分为两组,一组在“pivot”中间数下面,一组在上面,然后(2)通过对每个组进行一次快速排序调用对每个组进行排序。
if (l<r) 
quicksort(array,l,r);
while  (mitte<array[i]) {
    j--;
  } // end of if
if (l<r) {
  quicksort(array,l,r);
} // end of if
if (i<r) {
   quicksort(array,i,r);
 } // end of if