2015-10-03 3 views
1

Я реализовал 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; 
} 
+0

не может быть, что они просто проверяют его с более чем миллионными входами? –

+0

Если вы перейдете по ссылке для проблемы, они упомянули границы размера. Это было 10^6. Который я удовлетворяет –

+2

Возможно, у них меньше размер стека, чем у вас. ~ 12 МБ много. – LogicStuff

ответ

0

«А SIGSEGV ошибка (сигнал) вызвано неверной ссылкой памяти или ошибкой сегментации. Вы, вероятно, пытаетесь получить доступ к элементу массива выходит за границами или пытаетесь использовать слишком много памяти.» Это означает, что в какой-то момент вашего кода вы пытаетесь использовать [i], где i < 0 или i> 1000000. Найдите его, возможно, с помощью отладчика.