glibc-2.29
函数定义 msort.c
void
qsort (void *b, size_t n, size_t s, __compar_fn_t cmp)
{
return __qsort_r (b, n, s, (__compar_d_fn_t) cmp, NULL);
}
libc_hidden_def (qsort)
void *b 表示指向数组的指针
size_t n 表示数组中元素个数
size_t s 表示数组中每个元素的大小
__compar_fn_t cmp 表示比较函数,在stdlib.h中有定义,
#ifndef __COMPAR_FN_T
# define __COMPAR_FN_T
typedef int (*__compar_fn_t) (const void *, const void *);
__qsort_r 流程
void __qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
1.这个算法是需要辅助内存空间的
(1)先计算出来需要开辟的内存空间大小。
如果每个元素的大小<=32,那么size=n*s;
如果每个元素的大小>32,那么size=2 * n * sizeof (void *) + s;
(2)如果size<1024,那么在栈上开辟空间。