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

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

提前致谢

娜塔莉;

最佳答案

中心是int,应该至少是long

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

运行时错误的可能原因:堆栈溢出(双关语:D)您正在执行递归并在堆栈上使用 O(n) 空间。如果您不向我们提供更多信息,我们无话可说。

关于c - 合并排序期间的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748345/

相关文章:

c - 对于简单计数器来说,是否需要实现信号量或互斥锁?

c - 为什么 scanf ("%d\n%d\n%d\n",&a,&b,&c);接受 4 个输入。它必须接受 3 个输入,但期望并接受 4 个输入

c - 如何获取文件中当前单词前后的单词?

git - 将历史添加到 git 存储库或 merge git 存储库

java - 合并大文件的算法

sql - MySQL仅从一张表中查询出现在某一类别表中的产品

c - 如何使用 openMPI 实现递归斐波那契

python - Pandas 合并101

c++ - 对结构 vector 进行两次排序

swift - 在分组字典中对子数组进行排序