Połącz algorytm wyboru QuickSort i Median
Chcę zmodyfikować QuickSort (w Javie), tak aby za każdym razem wywoływana była Partycja, mediana proporcjonalnej tablicy była używana jako przestawna.
Mam w języku Java algorytm selekcji mediany, który zwraca k-ty najmniejszy element, w tym przypadku medianę. Mam mnóstwo algorytmów quicksort w java, które działają same i sortują tablicę. Niestety nie mogę połączyć tych dwóch w celu osiągnięcia powyższego ... Za każdym razem, gdy próbuję, zazwyczaj otrzymuję erozję stackoverflow.
Czy ktoś może mi pokazać kod, aby zobaczyć, jak można to zrobić?
Dzięki
EDYCJA: Na przykład jest to mediana algorytmu wyboru, którego próbowałem użyć.
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;
}
Działa samodzielnie, ale kiedy próbuję wywołać quickSelect za pomocą funkcji partycji quicksort, aby zwrócić pivot, który ma zostać użyty, nie działa. Oczywiście robię coś złego, ale nie wiem co. Niestety w Internecie nie znalazłem żadnego algorytmu, nawet w pseudokodzie, który łączyłby medianę z quicksortem.