28 lines
978 B
Diff
28 lines
978 B
Diff
commit 74d2731a5fb2676b64092bc25e7f193db1b17b2b
|
|
Author: Kuan-Wei Chiu <visitorckw@gmail.com>
|
|
Date: Tue Jan 16 10:16:56 2024 +0800
|
|
|
|
stdlib: Fix heapsort for cases with exactly two elements
|
|
|
|
When malloc fails to allocate a buffer and falls back to heapsort, the
|
|
current heapsort implementation does not perform sorting when there are
|
|
exactly two elements. Heapsort is now skipped only when there is
|
|
exactly one element.
|
|
|
|
Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
|
|
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
|
|
|
diff --git a/stdlib/qsort.c b/stdlib/qsort.c
|
|
index b95889047ba31193..7b6c7e1f79974157 100644
|
|
--- a/stdlib/qsort.c
|
|
+++ b/stdlib/qsort.c
|
|
@@ -163,7 +163,7 @@ get_swap_type (void *const pbase, size_t size)
|
|
static void
|
|
heapsort_r (void *base, size_t n, size_t size, __compar_d_fn_t cmp, void *arg)
|
|
{
|
|
- if (n <= 1)
|
|
+ if (n == 0)
|
|
return;
|
|
|
|
enum swap_type_t swap_type = get_swap_type (base, size);
|