X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fsort.qh;h=cd0000912dfcfb65b715bcfabebf889d29144adc;hb=7892e4aee4861fcc8191a3f0890293665b9c7abd;hp=2790cdf2dc3cc760dbe814bc8c8edb3be2322695;hpb=77d6a05629e33da863fccb3cdd03b3c63af890dd;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/sort.qh b/qcsrc/lib/sort.qh index 2790cdf2d..cd0000912 100644 --- a/qcsrc/lib/sort.qh +++ b/qcsrc/lib/sort.qh @@ -5,20 +5,19 @@ USING(swapfunc_t, void (int i1, int i2, entity pass)); /** <0 for <, ==0 for ==, >0 for > (like strcmp) */ USING(comparefunc_t, int (int i1, int i2, entity pass)); +ERASEABLE void heapsort(int n, swapfunc_t swap, comparefunc_t cmp, entity pass) { #define heapify(_count) \ MACRO_BEGIN \ - { \ for (int start = floor(((_count) - 2) / 2); start >= 0; --start) \ { \ siftdown(start, (_count) - 1); \ } \ - } MACRO_END + MACRO_END #define siftdown(_start, _end) \ MACRO_BEGIN \ - { \ for (int root = (_start); root * 2 + 1 <= (_end); ) \ { \ int child = root * 2 + 1; \ @@ -27,7 +26,7 @@ void heapsort(int n, swapfunc_t swap, comparefunc_t cmp, entity pass) swap(root, child, pass); \ root = child; \ } \ - } MACRO_END + MACRO_END heapify(n); int end = n - 1; @@ -39,6 +38,7 @@ void heapsort(int n, swapfunc_t swap, comparefunc_t cmp, entity pass) } } +ERASEABLE void shuffle(float n, swapfunc_t swap, entity pass) { for (int i = 1; i < n; ++i)