From 6345d01a1b49ac14603a6ff1dfb06fa38033d6fc Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Mon, 15 Apr 2024 04:07:13 +0000 Subject: [PATCH] adding some algorithms to stlite --- stlite/algorithm.hpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 stlite/algorithm.hpp diff --git a/stlite/algorithm.hpp b/stlite/algorithm.hpp new file mode 100644 index 0000000..181f8ea --- /dev/null +++ b/stlite/algorithm.hpp @@ -0,0 +1,40 @@ +#include +#include +namespace ZYM { +template +void MergeSort(T *beg, T *end, bool (*cmp)(const T &, const T &)) { + if (end - beg <= 1) return; + size_t len = end - beg; + T *mid = beg + (len >> 1); + MergeSort(beg, mid, cmp); + MergeSort(mid, end, cmp); + T *tmp = new T[len]; + T *cur_tmp = tmp, *cur_L = beg, *cur_R = mid; + while ((cur_L < mid) && (cur_R < end)) { + if (cmp(*cur_L, *cur_R)) + *(cur_tmp++) = *(cur_L++); + else + *(cur_tmp++) = *(cur_R++); + } + while (cur_L < mid) *(cur_tmp++) = *(cur_L++); + while (cur_R < end) *(cur_tmp++) = *(cur_R++); + cur_tmp = tmp; + T *cur_dst = beg; + while (cur_dst < end) *(cur_dst++) = *(cur_tmp++); + delete[] tmp; +} +template +void swap(T &a, T &b) { + T c(std::move(a)); + a = std::move(b); + b = std::move(c); +} +template +const T &min(const T &a, const T &b) { + return a < b ? a : b; +} +template +const T &max(const T &a, const T &b) { + return a > b ? a : b; +} +} // namespace ZYM \ No newline at end of file