Combina el algoritmo de selección QuickSort y Median

Quiero modificar QuickSort (en Java) para que cada vez que se llame a Partition, la mediana de la matriz proporcionada se utilice como pivote.

Tengo un algoritmo de selección de mediana en Java que devuelve el kth elemento más pequeño, en este caso la mediana. Tengo toneladas de algoritmos de orden rápido en Java que funcionan por sí mismos y ordenan una matriz. Desafortunadamente, no puedo combinar esos dos para lograr lo anterior ... Cada vez que lo intento, generalmente obtengo errores de stackoverflow.

¿Alguien puede mostrarme el código para ver cómo se puede hacer?

Gracias

EDITAR: Por ejemplo, este es un algoritmo de selección de mediana que he tratado de usar.

public int quickSelect(int[] A, int p, int r, int k) {
    if (p==r) return A[p];
    int q = Partition(A,p,r);
    int len = q-p+1;

    if (k == len) return A[q];
    else if (k<len) return Select(A,p,q-1,k);
    else return Select(A,q+1,r,k-len);
}

public int partition(int[]A, int p, int r) {
    int x = A[r];
    int i = p-1;
    for (int j = p; j<=r-1; j++) {
        if (A[j] <= x) {
            i++;
            swap(A,i,j);
        }
    }
    swap(A,i+1,r);
    return i+1;
}

Funciona solo, pero cuando intento llamar a quickSelect a través de la función de partición de quicksort para devolver el pivote que se va a usar, no funciona. Obviamente estoy haciendo algo mal pero no sé qué. Desafortunadamente, en Internet no he encontrado ningún algoritmo, ni siquiera en pseudocódigo, que combinara una selección de mediana con una ordenación rápida.

Respuestas a la pregunta(4)

Su respuesta a la pregunta