Ошибка времени выполнения при сортировке слиянием - PullRequest
2 голосов
/ 21 апреля 2011

Я получаю ошибку времени выполнения каждый раз, когда запускаю этот код, алгоритм кажется правильным, я использую длинные значения вместо целых, потому что размер массива большой.

так в чем проблема?

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

Заранее спасибо

Nathalie;

1 Ответ

0 голосов
/ 06 июля 2011

Центр - int, должно быть не менее long.

В m2 вы должны вернуться в m2, а не mergeSort, потому что не хотите рассчитывать время-calculations.

Возможная причина ошибки времени выполнения: переполнение стека (каламбур: D) вы выполняете рекурсию и используете пространство O (n) в стеке.Больше ничего не скажу, если ты не дашь нам больше информации.

...