diff options
author | das <das@FreeBSD.org> | 2008-01-14 09:21:34 +0000 |
---|---|---|
committer | das <das@FreeBSD.org> | 2008-01-14 09:21:34 +0000 |
commit | 00c36da743aaefbec9722e876ba63eed19fac1c8 (patch) | |
tree | 3137383c3994f8c968e34bf433390de9341541f0 /lib/libc/stdlib | |
parent | bd332c3c416401f6fead22280b41ba21f28f143c (diff) | |
download | FreeBSD-src-00c36da743aaefbec9722e876ba63eed19fac1c8.zip FreeBSD-src-00c36da743aaefbec9722e876ba63eed19fac1c8.tar.gz |
Changing 'r' to a size_t in the previous commit turned quicksort
into slowsort for some sequences because different parts of the
code used 'r' to store two different things, one of which was
signed. Clean things up by splitting 'r' into two variables, and
use a more meaningful name.
Diffstat (limited to 'lib/libc/stdlib')
-rw-r--r-- | lib/libc/stdlib/qsort.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/libc/stdlib/qsort.c b/lib/libc/stdlib/qsort.c index 0958cd3..3687b05 100644 --- a/lib/libc/stdlib/qsort.c +++ b/lib/libc/stdlib/qsort.c @@ -112,6 +112,7 @@ qsort(void *a, size_t n, size_t es, cmp_t *cmp) { char *pa, *pb, *pc, *pd, *pl, *pm, *pn; size_t d, r; + int cmp_result; int swaptype, swap_cnt; loop: SWAPINIT(a, es); @@ -141,16 +142,16 @@ loop: SWAPINIT(a, es); pc = pd = (char *)a + (n - 1) * es; for (;;) { - while (pb <= pc && (r = CMP(thunk, pb, a)) <= 0) { - if (r == 0) { + while (pb <= pc && (cmp_result = CMP(thunk, pb, a)) <= 0) { + if (cmp_result == 0) { swap_cnt = 1; swap(pa, pb); pa += es; } pb += es; } - while (pb <= pc && (r = CMP(thunk, pc, a)) >= 0) { - if (r == 0) { + while (pb <= pc && (cmp_result = CMP(thunk, pc, a)) >= 0) { + if (cmp_result == 0) { swap_cnt = 1; swap(pc, pd); pd -= es; |