Ошибка сегментации при попытке разделения в быстрой сортировке - PullRequest
0 голосов
/ 13 марта 2020

В настоящее время я работаю над алгоритмом QuickSort, и он по большей части работает нормально. Однако есть один набор данных, с которым я работаю, и каждый раз, когда я его использую, у меня возникает ошибка сегментации в моей IDE. Однако, когда я отправляю sh этот код в GitHub, эта конкретная ошибка сегментации не обнаруживается. Я запустил отладчик для своего кода, и он говорит мне, что эта ошибка сегментации возникает, когда я вызываю свою функцию splitRandom (которая действует как алгоритм случайного разделения). Вот мой код быстрой сортировки для справки:

void swapElements(char ** x, char ** y){
char * temp = *x;
*x = *y;
*y = temp;}

int split(char ** &array, int low, int high)
{
int pivot = high;
int i = low - 1; 

for (int j = low; j <= high - 1; ++j) {
    char *currentWord = array[j];
    int jLength = strlen(currentWord);
    int pivotLength = strlen(array[pivot]);
    if (jLength > pivotLength)
    {
        ++i;
        swapElements(&array[i], &array[j]);
    }
    else if (jLength == pivotLength)
    {
        if (strcmp(array[j], array[pivot]) < 0)
        {
            ++i;
            swapElements(&array[i], &array[j]);
        }
    }
}
swapElements(&array[i + 1], &array[high]);
return i + 1;
}`

int splitRandom(char ** &array, int low, int high)
{
srand(time(NULL));
int randNum = low + rand() % (high - low);

swap(array[randNum], array[high]);

return split(array, low, high);
}

void quickSort(char ** &array, int low, int high)
{
if (low < high)
{
    int splitIndex = splitRandom(array, low, high);

    quickSort(array, low, splitIndex-1);
    quickSort(array, splitIndex + 1, high);
}
}

Я, вероятно, также должен отметить, что вывод и запуск этой программы работают нормально на GitHub, и каждый раз, когда я использую другой набор данных (я даже использовал один с десятью миллионами слов) все работает и работает просто отлично. Есть ли здесь очевидные проблемы? Есть ли проблема с конкретным набором данных? Собираюсь ли я углубиться в рекурсию? Любая помощь будет очень признательна!

РЕДАКТИРОВАТЬ: Извините, я немного новичок в переполнении стека ... Я не совсем уверен, как вставить набор данных в этом посте (потому что да Я действительно должен был включить его в исходный вопрос), для справки он содержит 1 000 000 случайных слов. В настоящее время ищу способ разместить его где-нибудь и связать с ним здесь. Спасибо за всю помощь до сих пор

...