415 {
416
417 size_t mid = nmemb / 2;
418 size_t last = nmemb - 1;
419
420 char* first_elem = base;
421 char* mid_elem = base + mid * size;
422 char* last_elem = base + last * size;
423
424
425 if (compar(mid_elem, first_elem) < 0) {
427 }
428 if (compar(last_elem, first_elem) < 0) {
430 }
431 if (compar(last_elem, mid_elem) < 0) {
433 }
434
435
437 char* pivot = base + (last - 1) * size;
438
439
440 size_t i = 0;
441 for (size_t j = 0; j < last - 1; ++j) {
442 if (compar(base + j * size, pivot) < 0) {
443 if (i != j) {
445 }
446 ++i;
447 }
448 }
449
450
452 return i;
453}
void qsort_swap(char *a, char *b, size_t size) FL_NO_EXCEPT