简单的QuickSort算法给出堆栈溢出错误?

我的朋友有一个小问题,我知道了。 他写了一个简单的(他在学校里得到它)QuickSort算法它产生了一个StackOverflow错误。 我知道这意味着它在某个地方调用自己递归太多次了,但我无法得到逻辑错误 – 请帮助我!

这是代码(我省略了一些代码,因为它只是在2个文本区域中显示):

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); 

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

如果需要更多代码,请参阅以下有关pastebin的完整代码: http : //pastebin.com/cwvbwXEu

首先,你有一个无限循环:

 while (mitte 

它需要是array[j]

其次(并导致无限递归),在第二次调用quicksort

 if (l 

在递归中,你总是需要缩短你自称的范围,否则它将是无限的。 我还没弄清楚你在做什么,但我认为你的意思是:

 if (i 

这个电话:

 if (l 

使用传入的相同参数递归调用quicksort ,而不是使用较小的子问题进行调用来解决。 因此它将无限递归。

 if (l 

不总是比r还小吗? 这将导致无限递归,这就是为什么如果两个值都相同则不会出现溢出的原因。