合并排序实现是否给出了运行时错误?

时间:2015-10-03 20:22:42

标签: c++ mergesort

我为代码厨师实现了以下练习问题的mergesort。 Turbo Sort。当我运行一些测试用例时,我得到了正确的答案,但在提交它时会抛出运行时SIGSEGV。任何人都可以说出可能出现的问题。

#include <iostream>

using namespace std;

void merge(int *arr, int low, int mid, int high)
{
    int L[1000000];
    int R[1000000];
    int res[1000000];

    int tempi = low;

    for(int  tempi = low; tempi <= high;tempi++)
    {
        if(tempi<mid+1)
        {
            L[tempi-low] = arr[tempi];
        }
        else
        {
            R[tempi-(mid+1)] = arr[tempi];
        }
    }

    int i = 0, j = 0,k = 0;

    while(i<mid+1-low && j<high-mid)
    {
        if(L[i]>R[j])
        {
            res[k] = R[j];
            j++;
        }
        else
        {
            res[k] = L[i];
            i++;
        }

        k++;
    }

    if(i == mid-low+1)
    {
        for(;j<high-mid;j++,k++)
        {
            res[k] = R[j];
        }
    }

    if(j == high-mid)
    {
        for(;i<mid+1-low;i++,k++)
        {
            res[k] = L[i];
        }
    }

    for(int i = 0;i <high-low+1; i++)
    {
        arr[low+i] = res[i];
    }
}

void MergeSort(int* arr,int p,int r)
{
    if(r>p)
    {
        int q = (p+r)/2;
        MergeSort(arr,p,q);
        MergeSort(arr,q+1,r);
        merge(arr,p,q,r);
    }
}

int main()
{
    int a[1000000];
    int t;
    cin>>t;

    for(int i = 0; i< t; i++)
    {
        cin>>a[i];
    }

    MergeSort(a,0,t-1);

    for(int i = 0; i<t;i++)
    {
        cout<<a[i]<<"\t";
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

“SIGSEGV是由无效的内存引用或分段错误引起的错误(信号)。您可能正在尝试访问数组元素超出范围或尝试使用太多内存。”这意味着在您的代码中的某个时刻,您尝试使用[i],其中i <0或i> 1000000。搜索它,可能使用调试器。