gpt4 book ai didi

algorithm - MergeSort 给出 StackOverflow 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:31:04 24 4
gpt4 key购买 nike

这是 mergeSort 的代码,这在第 53 行和第 54 行(mergeSort(l,m); 和 mergeSort(m,h);)中给出了一个 stackoverflow 错误任何帮助都将被视为非常有值(value),请帮助我,我一无所知,谢谢。

package codejam;

public class vector {
static int[] a;
static int[] b;
public static void main(String[] args) {
int[] a1 = {12,33,2,1};
int[] b1 = {12,333,11,1};
mergeSort(0,a1.length);
a1=b1;
mergeSort(0,b1.length);
for (int i = 0; i < a1.length; i++) {
System.out.println(a[i]);
}

}

public static void merge(int l,int m,int h) {
int n1=m-l+1;
int n2 = h-m+1;
int[] left = new int[n1];
int[] right = new int[n2];
int k=l;
for (int i = 0; i < n1 ; i++) {
left[i] = a[k];
k++;
}
for (int i = 0; i < n2; i++) {
right[i] = a[k];
k++;
}
left[n1] = 100000000;
right[n1] = 10000000;
int i=0,j=0;
for ( k =l ; k < h; k++) {
if(left[i]>=right[j])
{
a[k] = right[j];
j++;
}
else
{
a[k] = left[i];
i++;
}
}
}

public static void mergeSort(int l,int h) {
int m =(l+h)/2;
if(l<h)
{
mergeSort(l,m);
mergeSort(m,h);
merge(l,m,h);;
}

}
}

最佳答案

以下是参数为 l=0 和 h=4 的 mergeSort 函数的递归迭代表

enter image description here

当 l 的值为 0 且 h 的值为 1 时,表达式计算 m 值结果为 0 但我们正在检查条件与 h 仍然为 1 因此 0<1 变为 true ,此 mergeSort 的递归调用函数形成一个模式,这个模式不会让函数终止,堆栈内存不足,导致堆栈溢出错误。

关于algorithm - MergeSort 给出 StackOverflow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16001832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com