diff options
author | Jakob Kaivo <jkk@ung.org> | 2020-08-15 11:26:40 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2020-08-15 11:26:40 -0400 |
commit | 3d38446f71e16735b2525f37dd1eb87d91c0e895 (patch) | |
tree | 491d0e896be22a01e600298853376eb23940b084 /src/stdlib/qsort.c | |
parent | 8306c893b485d1931d4055b0ae7d9f794ceaaaa8 (diff) |
first draft of qsort()
Diffstat (limited to 'src/stdlib/qsort.c')
-rw-r--r-- | src/stdlib/qsort.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/stdlib/qsort.c b/src/stdlib/qsort.c index da4c5c15..f0ccba33 100644 --- a/src/stdlib/qsort.c +++ b/src/stdlib/qsort.c @@ -1,11 +1,29 @@ #include <stdlib.h> +#include "_qsort.h" /** sort an array **/ void qsort(void * base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { - (void)base; (void)nmemb; (void)size; (void)compar; - /* TODO */ + struct __qs qs = { + base, + size, + compar, + { 0 }, + NULL, + }; + + if (size <= sizeof(qs.buf)) { + qs.swap = qs.buf; + } else { + qs.swap = malloc(size); + } + + __qsort(&qs, 0, nmemb); + + if (qs.swap != qs.buf) { + free(qs.swap); + } } /*** |