K & R Qsort-Beispiel mit Verwechslung von Zeigern und Arrays

Ich finde es schwierig, den folgenden Codeausschnitt zu verstehen. Ich verstehe den Hinweis auf Funktionsweise gezeigt, aber wo ich Verwirrung finde, steht in den angegebenen Zeilen.

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]

}

Kann mir jemand diese Routine erklären, insbesondere die angezeigten Zeilen? Sagen Sie mir einfach, was sie tut, denn ich kann diese QSort nicht herausfinden. Der Eskimo-Leitfaden, den ich beim Lesen von K & R gelesen habe, sagte, die QSort-Routine sei Müll und übermäßig kompliziert. Ich muss nur verstehen, warum es so geschrieben ist, weil es für mich keinen Sinn ergibt.

Vielen Dank, wenn überhaupt, dass Sie dies gelesen haben.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage