From aa04b6ae330b42f8a2faaa8a038ce7efbf60cb3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20O=2E=20Sel=C3=A5sdal?= Date: Mon, 2 Dec 2013 21:51:26 +0100 Subject: [PATCH] Remove the wrong heapsort implementation --- include/ucore/heapsort.h | 21 -------------------- src/heapsort.c | 41 ---------------------------------------- 2 files changed, 62 deletions(-) delete mode 100644 include/ucore/heapsort.h delete mode 100644 src/heapsort.c diff --git a/include/ucore/heapsort.h b/include/ucore/heapsort.h deleted file mode 100644 index c5dbf01..0000000 --- a/include/ucore/heapsort.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef UC_HEAPSORT_H_ -#define UC_HEAPSORT_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif -///compare function. Needs only to return < 0 if -//the first element is less than the second -typedef int (*uc_hs_cmp)(const void *, const void *); - -void -uc_heapsort(void *base, size_t count, size_t width, - uc_hs_cmp cmp); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/heapsort.c b/src/heapsort.c deleted file mode 100644 index e291c89..0000000 --- a/src/heapsort.c +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include "ucore/heapsort.h" - -static void -uc_sift(unsigned char *base, size_t start, size_t count, size_t width, - uc_hs_cmp cmp) -{ - size_t root = start, child; - - while ((root * 2 + 1) < count) { - child = root * 2 + 1; - if (child < (count - 1) - && cmp(&base[child * width], &base[(child + 1) * width]) < 0) - child++; - - if (cmp(&base[root * width], &base[child * width]) < 0) { - memcpy(base + root * width, base + child * width, width); - root = child; - } else - return; - } -} - -void -uc_heapsort(void *base_, size_t count, size_t width, - uc_hs_cmp cmp) -{ - int start = count / 2 - 1, end = count - 1; - unsigned char *base = base_; - - while (start >= 0) { - uc_sift(base, start, count, width, cmp); - start--; - } - - while (end > 0) { - memcpy(base + end * width, base, width); - uc_sift(base, 0, end, width, cmp); - end--; - } -}