我的朋友有一个小问题,我在我的知识结束。他写了一个简单的(他在学校)QuickSort算法它会产生一个StackOverflow错误。我知道这意味着它会在某个地方多次调用递归,但我无法获得逻辑错误 - 请帮助我!提供堆栈溢出错误的简单QuickSort算法?
下面是代码(我要离开了一些代码,这只是显示它在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号码,它不会产生溢出。
如果需要更多的代码,这里是引擎收录的全码:http://pastebin.com/cwvbwXEu
这似乎是我的朋友从一个简单的抄板错误。谢啦。 – Marenthyu
还要注意,递归不应该在while循环中。快速排序是(1)将数组分成两组,一组全部低于你的“数据透视”中间数字和一个以上,然后(2)用一次调用将每个组排序,每组快速排序。 – mackworth