Kombinieren Sie den QuickSort- und den Median-Auswahlalgorithmus

Ich möchte QuickSort (in Java) so ändern, dass bei jedem Aufruf von Partition der Median des proportionierten Arrays als Dreh- und Angelpunkt verwendet wird.

Ich habe einen Median-Auswahlalgorithmus in Java, der das k-te kleinste Element zurückgibt, in diesem Fall den Median. Ich habe Tonnen von QuickSort-Algorithmen in Java, die alle für sich arbeiten und ein Array sortieren. Leider kann ich diese beiden nicht kombinieren, um das oben genannte Ziel zu erreichen.

Kann mir jemand Code zeigen, um zu sehen, wie das geht?

Vielen Dank

BEARBEITEN: Dies ist beispielsweise ein Median-Auswahlalgorithmus, den ich versucht habe, zu verwenden.

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;
}

Es funktioniert von selbst, aber wenn ich versuche, quickSelect über die Partitionsfunktion von quicksort aufzurufen, um den zu verwendenden Pivot zurückzugeben, funktioniert es nicht. Offensichtlich mache ich etwas falsch, aber ich weiß nicht was. Leider habe ich im Internet selbst im Pseudocode keinen Algorithmus gefunden, der eine Medianauswahl mit Quicksort kombiniert.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage