在java中實現快速排序時遇到了一些問題。我運行這個程序時遇到了一個stackoverflow錯誤,我不確定爲什麼。如果有人能指出這個錯誤,那會很好。使用Quicksort Java實現的Stackoverflow
si是起始索引。 ei是結束索引。
public static void qsort(int[] a, int si, int ei){
//base case
if(ei<=si || si>=ei){}
else{
int pivot = a[si];
int length = ei - si + 1;
int i = si+1; int tmp;
//partition array
for(int j = si+1; j<length; j++){
if(pivot > a[j]){
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
i++;
}
}
//put pivot in right position
a[si] = a[i-1];
a[i-1] = pivot;
//call qsort on right and left sides of pivot
qsort(a, 0, i-2);
qsort(a, i, a.length-1);
}
}
哪條線拋出異常? – 2013-02-16 05:36:45
最後兩行。這兩個在樞軸的右側和左側調用quicksort。 – 2013-02-16 05:38:05
如果子數組的大小爲0或1,則基本案例看起來很標準。 – bdares 2013-02-16 05:39:28