Я реализовал mergesort для следующей проблемы с практикой для шеф-повара кода. Turbo Sort. Когда я запускаю некоторые тестовые примеры, я получаю правильный ответ, но при отправке он выдает Runtime SIGSEGV. Может кто-нибудь сказать, что могло пойти не так.Ошибка выполнения Merge Sort дает ошибку времени выполнения?
#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;
}
не может быть, что они просто проверяют его с более чем миллионными входами? –
Если вы перейдете по ссылке для проблемы, они упомянули границы размера. Это было 10^6. Который я удовлетворяет –
Возможно, у них меньше размер стека, чем у вас. ~ 12 МБ много. – LogicStuff