Я пытаюсь реализовать алгоритм быстрой сортировки в c ++ как проект в лекции.Программа работает нормально, когда я исключаю сводку из рекурсивных вызовов, но иногда вызывает ошибку переполнения стека, когда я включаю сводку в любой из рекурсивных вызовов.
Сбой программы только для определенного размера массива, ноЯ не могу понять, какое отношение они имеют к ошибкам.Например, программа дает сбой, когда я даю 40, но прекрасно работает для 50.
void quicksort(double* arr, int init, int fin) {
if (init == fin) return;
if (init == fin - 1) {
if (arr[init] > arr[fin]) {
double temp = arr[fin];
arr[fin] = arr[init];
arr[init] = temp;
}
return;
}
int smaller = init - 1;
double pivot = arr[fin];
for (int ind = init; ind < fin; ind++) {
if (arr[ind] < pivot) {
smaller++;
double temp = arr[ind];
arr[ind] = arr[smaller];
arr[smaller] = temp;
}
}
arr[fin] = arr[smaller + 1];
arr[smaller + 1] = pivot;
if(smaller>=init) quicksort(arr, init, smaller);
if(smaller+2<=fin) quicksort(arr, smaller + 2, fin);
return;
}
Это код, о котором идет речь.Это работает нормально, когда я говорю это так, но вызывает ошибки, когда я заменяю
if(smaller+2<=fin) quicksort(arr, smaller + 2, fin);
на
if(smaller+1<=fin) quicksort(arr, smaller + 1, fin);