在爲考試練習時,我遇到了一個(對我來說)使用快速排序的奇怪問題。快速排序堆棧溢出錯誤
我的實現:
public void quicksort(int l, int r)
{
if(l<r && l>0 && r<=array.length-1)
{
int pivot = array[pivot(l, r)];
int i = l;
int j = r;
if(j==i+1)
{
if(array[i]>array[j])
{
System.out.println(array[i]+"<->"+array[j]);
int help = array[i];
array[i] = array[j];
array[j] = help;
}
}
else{ while(i<=j)
{
if(array[i]>=pivot && pivot>= array[j])
{
System.out.println(array[i]+">="+pivot+">="+array[j]);
int help = array[i];
array[i] = array[j];
array[j] = help;
i++;
j--;
}
else{
i++;
}
}
if(l<j && j<array.length-1)quicksort(l, j);
if(i<r)quicksort(i, r);
}
}
}
但是,這給了我一個「java.lang.StackOverflowError的:空」的(在這裏)34號線可以,但是,通過與J-交換J值可以避免此錯誤1和我在第34行和第35行中的j.我真的嘗試了一切進入我的想法,但我真的不能想出一個解決方案:/
這是預期的投入產出? – 2015-04-01 14:25:40
而不是使用調用堆棧,使用堆棧集合。創建一個,因爲java的棧中唯一的impl是同步的。 – sturcotte06 2015-04-01 14:27:52
int數組「數組」在另一個方法中定義。 l是當前列表的左邊和右邊界元素。兩者都是int值,因爲它們被用作int數組的索引。 – Philipp 2015-04-01 14:28:30