我为代码厨师实现了以下练习问题的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;
}
答案 0 :(得分:0)
“SIGSEGV是由无效的内存引用或分段错误引起的错误(信号)。您可能正在尝试访问数组元素超出范围或尝试使用太多内存。”这意味着在您的代码中的某个时刻,您尝试使用[i],其中i <0或i> 1000000。搜索它,可能使用调试器。