1 /* based on musl libc's qsort.c */
5 #define MIN(a, b) ((a) < (b) ? (a) : (b))
7 static void swap(char *a
, char *b
, int sz
)
11 int l
= MIN(sizeof(tmp
), sz
);
21 static void fix(char *a
, int root
, int n
, int sz
, int (*cmp
)(void *, void *))
23 while (2 * root
<= n
) {
25 if (max
< n
&& cmp(a
+ max
* sz
, a
+ (max
+ 1) * sz
) < 0)
27 if (max
&& cmp(a
+ root
* sz
, a
+ max
* sz
) < 0) {
28 swap(a
+ root
* sz
, a
+ max
* sz
, sz
);
36 void qsort(void *a
, int n
, int sz
, int (*cmp
)(void *, void *))
42 for (i
= (n
+ 1) >> 1; i
; i
--)
43 fix(a
, i
- 1, n
- 1, sz
, cmp
);
44 for (i
= n
- 1; i
; i
--) {
45 swap(a
, a
+ i
* sz
, sz
);
46 fix(a
, 0, i
- 1, sz
, cmp
);