Пример 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 - мусор, и слишком сложный. Мне просто нужно понять, почему это написано так, потому что это не имеет смысла для меня.
Спасибо, если даром за то, что прочитал это.