Ошибка сегмента при сортировке слиянием в строках - PullRequest
0 голосов
/ 08 октября 2018

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

void MergeSort(string *input, int lowBound, int highBound)
{
    int midBound;
    if (lowBound < highBound)
    {
        midBound = (lowBound + highBound) / 2;

        MergeSort(input, lowBound, midBound);
        MergeSort(input, midBound + 1, highBound);

        MergeArrs(input, lowBound, highBound, midBound);
    }
}

void MergeArrs(string *a, int lowBound, int highBound, int midBound)
{
    int i, j, idx; 
    string tmp[highBound - lowBound + 1];
    i = lowBound; //Index for front arr
    idx = 0;
    j = midBound + 1; //Index for back arr

    while (i <= midBound && j <= highBound)
    {
        if (a[i] < a[j])
        {
            tmp[idx] = a[i];
            idx++;
            i++;
        }
        else
        {
            tmp[idx] = a[j];
            idx++;
            j++;
        }
    }

    while (i <= midBound)
    {
        tmp[idx] = a[i];
        idx++;
        i++;
    }

    while (j <= highBound)
    {
        tmp[idx] = a[j];
        idx++;
        j++;
    }

    for (i = lowBound; i <= highBound; i++)
    {
        a[i] = tmp[i - lowBound];
    }
}

Если у кого-либо есть идеи, откуда происходит ошибка сегмента, любая информация будет принята с благодарностью.Мой тестовый массив выглядит так:

string arr[6] = {"alpha", "beta", "omega", "zeta", "epsilon", "beach"};

И называется так:

MergeSort(arr, 0, 6);

1 Ответ

0 голосов
/ 08 октября 2018

Я не умный человек.Индексируя, от 0 до 5 в моем вызове сортировки слиянием, программа работает, потому что, да, это самый высокий и самый низкий индексы.Флипси сказал.

...