每次运行此代码时,我都会遇到运行时错误,算法似乎是正确的,我使用长值而不是整数,因为数组的大小很大。
那么似乎是什么问题?
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);
}
}
先谢谢
纳塔莉;
答案 0 :(得分:0)
中心为int
,至少应为long
。
在m2
中,您应该递归到m2
而不是mergeSort
,因为您不想计算子计算的时间。
运行时错误的可能原因:堆栈溢出(pun:D)您正在进行递归并在堆栈上使用O(n)空间。如果你不给我们更多的信息,不能说别的。