Combine o algoritmo de seleção QuickSort e Median
Eu quero modificar o QuickSort (em Java) para que toda vez que o Partition for chamado, a mediana do array proporcional seja usada como o pivô.
Eu tenho um algoritmo de seleção mediana em Java que retorna o menor elemento kth, neste caso a mediana. Eu tenho toneladas de algoritmos de quicksort em java que todos trabalham sozinhos e ordenam um array. Infelizmente eu não posso combinar os dois para alcançar o que foi dito acima ... Toda vez que eu tento normalmente eu recebo erros de stackoverflow.
Alguém pode me mostrar o código para ver como isso pode ser feito?
obrigado
EDIT: Por exemplo, este é um algoritmo de seleção mediana que eu tentei 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;
}
Ele funciona sozinho, mas quando eu tento chamar quickSelect através da função de partição do quicksort para retornar o pivô a ser usado, ele não funciona. Obviamente estou fazendo algo errado, mas não sei o quê. Infelizmente na internet eu não encontrei nenhum algoritmo, mesmo em pseudocódigo, que combinaria uma seleção mediana com quicksort.