Java-ForkJoin/MergeSort堆栈溢出
我正在使用ForkJoin框架实现一个合并排序/插入排序解决方案。但是,我得到了一个stackoverflow错误,似乎无法跟踪问题发生的位置。该解决方案旨在对1-10000000之间的一系列随机值进行排序。对于从0到100的范围,我使用插入排序,对于范围更大的范围,我使用合并排序 主要方法:Java-ForkJoin/MergeSort堆栈溢出,java,multithreading,fork-join,Java,Multithreading,Fork Join,我正在使用ForkJoin框架实现一个合并排序/插入排序解决方案。但是,我得到了一个stackoverflow错误,似乎无法跟踪问题发生的位置。该解决方案旨在对1-10000000之间的一系列随机值进行排序。对于从0到100的范围,我使用插入排序,对于范围更大的范围,我使用合并排序 主要方法: class Assignment3 { public static void main(String[] args) { long startTime1 = Sys
class Assignment3 {
public static void main(String[] args) {
long startTime1 = System.currentTimeMillis();
int S = 10000000;
int d[] = new int[S];
for(int j=0;j<d.length;j++) {
d[j] = (int)(Math.random()*10000);
}
ForkJoinPool fjpool = new ForkJoinPool();
// Array, lb, ub
fjpool.invoke(new Ass3Q2(d,0,d.length));
long endTime1 = System.currentTimeMillis();
long runningTime1 = endTime1 - startTime1;
System.out.println(runningTime1+" millisecs ("+(runningTime1/1000.0)+")");
boolean sorted = true;
for(int i=0;i<d.length-1;i++) {
if(d[i] > d[i+1]) {
sorted = false;
}
}
System.out.println("Sorted List: "+sorted);
}
}
mergeSort
使用相同的参数调用自身:mergeSort(a,l,u)
(如果我们输入if
),这就是stackoverflow错误的原因
static void mergeSort(int a[], int l, int u) {
if(l+1 < u) {
int mid = (l+u)/2;
mergeSort(a,l,u); // this call is most likely unwanted
mergeSort(a,mid,u);
merge(a,l,mid,u);
}
}
静态void合并排序(int a[],int l,int u){
如果(l+1
发布堆栈跟踪。“你到底从哪里得到这么多?”埃德哈内德抱歉,我已经更新了操作
Exception in thread "main" java.lang.StackOverflowError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.util.concurrent.ForkJoinTask.getThrowableException(Unknown Source)
at java.util.concurrent.ForkJoinTask.reportResult(Unknown Source)
at java.util.concurrent.ForkJoinTask.join(Unknown Source)
at java.util.concurrent.ForkJoinPool.invoke(Unknown Source)
at Assignment3.main(Assignment3.java:71)
Caused by: java.lang.StackOverflowError
at Ass3Q2.mergeSort(Assignment3.java:150)
at Ass3Q2.mergeSort(Assignment3.java:150)
at Ass3Q2.mergeSort(Assignment3.java:150)
at Ass3Q2.mergeSort(Assignment3.java:150)
at Ass3Q2.mergeSort(Assignment3.java:150)
at Ass3Q2.mergeSort(Assignment3.java:150)
static void mergeSort(int a[], int l, int u) {
if(l+1 < u) {
int mid = (l+u)/2;
mergeSort(a,l,u); // this call is most likely unwanted
mergeSort(a,mid,u);
merge(a,l,mid,u);
}
}