Как решить проблему переполнения стека в алгоритме быстрой сортировки?
При запуске программа выдает ошибку переполнения стека. Метод разделения (part), судя по тестам, реализован правильно.
public class Main {
public static void sort(int[] array) {
qsort(array, 0, array.length - 1);
}
public static void qsort(int[] array, int li, int ri) {
int dif = ri - li;
if (dif < 1)
return;
int mid = (ri + li) / 2;
int p = part(array, li, ri, mid);
qsort(array, li, p - 1);
qsort(array, p + 1, ri);
}
public static int part(int[] array, int li, int ri, int index) {
swap(array, index, array.length - 1);
index = ri - li;
int j = 0;
for (int i = li; i < ri; i++)
if (array[index] > array[i])
swap(array, j++, i);
swap(array, j, index);
return j;
}
public static void swap(int[] array, int i1, int i2) {
int temp = array[i1];
array[i1] = array[i2];
array[i2] = temp;
}
public static void main(String[] args) {
int[] arr = new int[] {5, 1, 8, 4, 6, 7, 3, 2, 2, 2};
sort(arr);
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
}
}