Пример K & R Qsort с путаницей указателей и массивов

Мне трудно понять следующий фрагмент кода. Я понимаю, указатель на функцию маньеризма показал, но где я нахожу путаницу в указанных строках.

void qsort(void **v, int left, int right, int (*comp) (void *, void *))
{
    int i, last;
    void swap(int **v, int i, int j);

    if (left >= right)   /* do nothing if array contains */
        return;           /* fewer than two elements */
    swap(v, left, (left + right)/2);   /* move partition elem */ [1]
    last = left;                       /* to v[0] */ [2]
    for (i = left + 1; i <= right; i++) /* partition */ [3]
        if ((*comp) (v[i], v[left]) < 0) [4]
            swap(v, ++last, i); [5]
    swap(v, left, last);        /* restore partition elem */ [6]
    qsort(v, left, last - 1); [7]
    qsort(v, last + 1, right);  [8]

}

Может ли кто-нибудь объяснить мне эту процедуру, особенно указанные строки, просто скажите мне, что она делает, потому что я не могу понять это руководство, эскимосское руководство, которое я прочитал, читая k & amp; r, сказав, что процедура qsort - мусор, и слишком сложный. Мне просто нужно понять, почему это написано так, потому что это не имеет смысла для меня.

Спасибо, если даром за то, что прочитал это.

Ответы на вопрос(5)

Ваш ответ на вопрос