From 933040452f1091b86192c08ad343cd5ae50d14d4 Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Sat, 15 Aug 2020 11:44:23 -0400 Subject: do swaps byte-by-byte to remove the need for allocating buffers --- src/stdlib/_qsort.h | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/stdlib/_qsort.h') diff --git a/src/stdlib/_qsort.h b/src/stdlib/_qsort.h index 298e28a1..28d273cd 100644 --- a/src/stdlib/_qsort.h +++ b/src/stdlib/_qsort.h @@ -1,19 +1,22 @@ #include -#include struct __qs { char *base; size_t size; int (*compar)(const void *, const void *); - char buf[64]; - char *swap; }; -static void __swap(struct __qs *a, size_t i, size_t j) +static void __swap(struct __qs *a, size_t b, size_t c) { - memcpy(a->swap, a->base + (a->size * i), a->size); - memcpy(a->base + (a->size * i), a->base + (a->size * j), a->size); - memcpy(a->base + (a->size * j), a->swap, a->size); + char *x = a->base + (a->size * b); + char *y = a->base + (a->size * c); + size_t i; + + for (i = 0; i < a->size; i++) { + char tmp = x[i]; + x[i] = y[i]; + y[i] = tmp; + } } static size_t __partition(struct __qs *a, size_t lo, size_t hi) -- cgit v1.2.1