每次运行此代码时,我都会收到运行时错误,算法似乎是正确的,我使用长值而不是整数,因为数组的大小很大。
那么问题是什么?
void mergeSort(long left,long right, int a[],long n)
{
clock_t ts,te;
ts=clock();
m2(left,right,a,n);
te=clock();
times[4]+=((double)(te-ts)/CLOCKS_PER_SEC)*1000;
}
void m2(long left,long right, int a[],long n)//related to mergesort
{
int center;
if( left < right )
{
center = (left + right) / 2;
mergeSort(left,center,a,n);
mergeSort(center+1,right,a,n);
merge(left,right,center,a,n);
}
}
提前致谢
娜塔莉;
最佳答案
中心是int
,应该至少是long
。
在 m2
中,您应该递归到 m2
而不是 mergeSort
,因为您不想对子计算计时。
运行时错误的可能原因:堆栈溢出(双关语:D)您正在执行递归并在堆栈上使用 O(n) 空间。如果您不向我们提供更多信息,我们无话可说。
关于c - 合并排序期间的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748345/