В настоящее время я работаю над алгоритмом 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 случайных слов. В настоящее время ищу способ разместить его где-нибудь и связать с ним здесь. Спасибо за всю помощь до сих пор