合并排序期间的运行时错误

时间:2011-04-21 18:37:43

标签: c merge sorting mergesort

每次运行此代码时,我都会遇到运行时错误,算法似乎是正确的,我使用长值而不是整数,因为数组的大小很大。

那么似乎是什么问题?

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);
    }
}

先谢谢

纳塔莉;

1 个答案:

答案 0 :(得分:0)

中心为int,至少应为long

m2中,您应该递归到m2而不是mergeSort,因为您不想计算子计算的时间。

运行时错误的可能原因:堆栈溢出(pun:D)您正在进行递归并在堆栈上使用O(n)空间。如果你不给我们更多的信息,不能说别的。