public class MergeSort
{
public static double[] MergeSort(double[] a){
if(a.length < 1){
return new double[0];
}
else if(a.length == 1){
return a;
}
else{
double[] l = Teiler(a, false);
double[] r = Teiler(a, true);
return Fueger(MergeSort(l), MergeSort(r));
}
}
...
}
公共靜態雙[] Fueger(雙[]一,雙[] B): 返回包含從a和b以正確的順序的所有數字double數組。java.lang.StackOverflowError的在歸併
公共靜態雙[] Teiler(雙[]一,布爾值1): 返回一半的元素(前半,如果L是假的,第二半,如果L爲true)
Fueger和Teiler工作得很好,但MergeSort總是給出java.lang.StackOverflowError,即使遞歸一旦數組爲空或只包含一個元素就應該終止。 問題是什麼?
感謝您的幫助
這裏是Fueger:
public static double[] Fueger(double[] a, double[] b){
double[] hilf = new double[a.length + b.length];
int i = 0;
while((a.length != 0) && (b.length != 0)){
if(a[0] < b[0]){
hilf[i] = a[0];
a = Weg(a);
}
else{
hilf[i] = b[0];
b = Weg(b);
}
i++;
}
if(a.length != 0){
for(double x : a){
hilf[i] = x;
a = Weg(a);
i++;
}
}
if(b.length != 0){
for(double x : b){
hilf[i] = x;
b = Weg(b);
i++;
}
}
return hilf;
}
Teiler:
public static double[] Teiler(double[] a, boolean r){
double[] hilf;
int x = 0;
if(r == false){
hilf = new double[(int) a.length/2];
for(int i = 0; i < a.length/2; i++){
hilf[x] = a[i];
i ++;
}
}
else{
hilf = new double[(int) (a.length/2) + 1];
for(int i = a.length/2; i < a.length; i++){
hilf[x] = a[i];
i ++;
}
}
return hilf;
}
您是否具有堆棧跟蹤(在StackOverflow發生時打印整個錯誤文本)?請在這裏發佈。 – kennytm
我懷疑堆棧跟蹤是否有幫助。我懷疑這只是大量的'MergeSort'行自行調用。看到'Teiler'方法會更有用 - 我有一種感覺,那就是錯誤的可能性。 –
在MergeSort.MergeSort(MergeSort.java:11) \t在MergeSort.MergeSort(MergeSort.java:13) \t在MergeSort.MergeSort(MergeSort.java:13) –