Понимание алгоритма выбора медианы?

В настоящее время я изучаю алгоритмы в свободное время, но у меня есть следующий вопрос при изучении алгоритмов select() главы 3.

Я понимаю, что могу использовать алгоритм select() для нахождения срединного числа (n/2-го наименьшего числа), если бы использовал массив от A до n чисел.

1), но это то, что я изо всех сил пытаюсь понять. А = [3, 7, 5, 1, 4, 2, 6, 2]. предположим, что это массив. что такое содержимое массива после каждого вызова Partition() и параметры при каждом рекурсивном вызове Select().

может ли кто-нибудь объяснить, как они это делают?

ниже приведен псевдокод для двух алгоритмов.

Select(A, p, r, k) {
    /* return k-th smallest number in A[p..r] */
    if (p==r) return A[p] /* base case */
    q := Partition(A,p,r)
    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)
}

и второй код

Partition(A, p, r) { /* partition A[p..r] */
    x := A[r] /* pivot */
    i := p-1
    for j := p to r-1 {
        if (A[j] <= x) {
            i++
            swap(A[i], A[j])
        }
    }
    swap(A[i+1], A[r])
    return i+1
}

Книга, которую я использую, называется The Derivation of Algorithms Анны Калдевайдж.

7
задан Chris Gerken 3 September 2012 в 15:13
поделиться