У меня есть этот кодПочему моя реализация Quicksort дает переполнение стека?
public static void quicksort(int[] array){
quicksort(array, 0, array.length - 1);
}
public static void quicksort(int[] array, int min_index, int max_index){
if(array.length <= 1 || min_index >= max_index){
return;
}
int pivot = array[(max_index + min_index)/2];
int left = min_index;
int right = max_index;
while(left <= right){
while(array[left] < pivot)
left++;
while(array[right] > pivot)
right--;
if(left <= right){
int aux = array[left];
array[left] = array[right];
array[right] = aux;
left++;
right--;
}
}
if(right > min_index)
quicksort(array, min_index, right);
if(left < max_index)
quicksort(array, left, max_index);
}
который работает довольно хорошо, но если я изменить стержень к pivot = array[0];
, он ломает, давая мне StackOverflow исключение. Я пробовал другие значения, и это похоже только на среднюю точку. Почему это происходит?
Вы имеете в виду эту строку: int pivot = array [(max_index + min_index)/2]; ? Код рекурсивный, каждый вызов функции должен иметь свой собственный стержень. – beatrice
Можете ли вы показать журналы ошибок, пожалуйста? –