clasificación rápida de una matriz de matrices enteras

Necesito ordenar un conjunto de conjuntos enteros para un problema de tarea en una de mis clases. Parece que obtengo un StackOverFlowError casi todas las veces. Mi matriz es list2 [10] [10]. Mi clasificación rápida se divide en 3 métodos. quickSort1 (int, int) es la función principal, la partición compara una nueva partición y el intercambio simplemente intercambia las matrices de enteros en list2 [i] y list2 [j]. el método compare (int a, int b) devuelve 1 si list2 [a] es menor que list2 [b] - 1 si b es menor que a y 100 si son iguales.

No estoy seguro de que mi ordenación rápida se implemente correctamente, pero sé que cambiar y comparar el trabajo exactamente como digo. Tengo el presentimiento de que se repite para siempre cuando obtengo el 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];
    }

}
Respuesta 1

No creo que estas líneas sean necesarias dentro del bucle while(i <= j):

if (i == pivot && i == j-1)
{
    return i;
}
if (j == pivot && j-1 == i)
{
    return i;
}

Intenta eliminarlos de tu código.

Respuesta: 2

Tengo un método que devuelve la cadena, pero quiero los datos dentro del método en StringBuilder y convertirlos en cadena, ¿cómo puedo hacerlo? Cadena pública [] [] getDataOfJD (Lista <...

He leído varias preguntas similares sobre StackOverflow pero todavía no he encontrado una solución a este problema. Estoy cargando un blob de Android al Blobstore de App Engine a través de un HTTPPost para ...

He tenido algunos problemas para que Bluetooth busque dispositivos con mi Samsung Galaxy s5. Estoy en Android 6.0 y he configurado permisos para que mi aplicación escanee así: if (Build.VERSION.SDK_INT & ...

Necesito asignar un objeto de matriz JSON con la clase de Java POJO. Escribí el código de esta manera: // ejecuta el cliente con el método get InputStream inputStream = getMethod.getResponseBodyAsStream (); ...