Мне нужно отсортировать массив целочисленных массивов для решения домашней задачи в одном из моих классов.Кажется, я получаю StackOverFlowError почти каждый раз.Мой массив это list2 [10] [10].Моя быстрая сортировка разделена на 3 метода.quickSort1 (int, int) является основной функцией, раздел сравнивает новый раздел, а swap просто меняет целочисленные массивы на list2 [i] и list2 [j].метод сравнения (int a, int b) возвращает 1, если list2 [a] меньше list2 [b] - 1, если b меньше a, и 100, если они равны.
Я не уверенмоя быстрая сортировка реализована правильно, но я знаю, что своп и сравнивают работу именно так, как я говорю, что они делают.У меня есть догадка, что это в основном повторяется навсегда, когда я получаю StackOverFlowError.
public static int partition(int low, int high)
{
int i = low, j = high;
int pivot = (low+high)/2;
System.out.println(i + " " + j + " " + pivot);
while (i <= j) {
while (compare(i, pivot) > 0)
i++;
while (compare(pivot, j) > 0)
j--;
if (i < j) {
swap(i,j);
i++;
j--;
}
if (i == pivot && i == j-1)
{
return i;
}
if (j == pivot && j-1 == i)
{
return i;
}
}
return i;
}
public static void quickSort1(int low, int high) {
System.out.println("Recursion: " + recursions);
int i = partition(low, high);
System.out.println(i);
if (low < i -1)
{
recursions++;
quickSort1(low, i -1);
}
if (i < high-1)
{
recursions++;
quickSort1(i, high);
}
}
public static void swap( int i, int j)
{
int[] temp = new int[n];
for(int k = 0; k < n; k++) {
temp[k] = list2[i][k];
}
for(int k = 0; k < n; k++) {
list2[i][k] = list2[j][k];
}
for(int k = 0; k < n; k++) {
list2[j][k] = temp[k];
}
}