From dfff6e20d97539ef85d105eab0b41487e3602878 Mon Sep 17 00:00:00 2001 From: KunoiSayami Date: Sat, 10 Sep 2022 19:14:36 +0800 Subject: feat: Implement expt_0830 Signed-off-by: KunoiSayami --- sortlib.h | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'sortlib.h') diff --git a/sortlib.h b/sortlib.h index c00c07f..8e5a763 100644 --- a/sortlib.h +++ b/sortlib.h @@ -3,7 +3,7 @@ #include #include -template class CustomSort { +template class CustomSort { public: CustomSort(size_t length, int move_offset) : LENGTH(length), MOVE_OFFSET(move_offset) {} @@ -45,11 +45,12 @@ public: } // son = get_son_from_step(son, (*last_known_point > val)); - auto tmp = (int)((*last_known_point - val) >> MOVE_OFFSET); - printf("%llu %llu ", val, *last_known_point); + auto tmp = ((*last_known_point - val) >> MOVE_OFFSET); + // printf("%llu %llu ", val, *last_known_point); son = son * 2 + tmp; - puts(tmp == 0 ? "1:left" : "1:right"); - // if (son < 0) son = 0; + // printf("%d\n", son); + // puts(tmp == 0 ? "1:left" : "1:right"); + // if (son < 0) son = 0; /*printf("%d %d %d\n", (1 << (i + 1)), son, -(int)((*last_known_point - val) >> MOVE_OFFSET));*/ last_known_point = next_level_start + son; @@ -65,16 +66,17 @@ public: if (val == mid_val) { return begin + mid; } - printf("%llu %llu ", val, mid_val); - puts(val > mid_val ? "right" : "left"); - /*begin += (int)((mid_val - val) >> MOVE_OFFSET) & (mid + 1); - end -= (int)(~((mid_val - val) >> MOVE_OFFSET)) & (mid + 1);*/ - if (val > mid_val) { + last_known_point = begin; + // printf("%llu %llu ", val, mid_val); + // puts(val > mid_val ? "right" : "left"); + // printf("%llu\n", ((val - mid_val) >> MOVE_OFFSET) * (mid + 1)); + begin += ((mid_val - val) >> MOVE_OFFSET) * (mid + 1); + end -= (((val - mid_val) >> MOVE_OFFSET)) * (mid + 1); + /*if (val > mid_val) { begin = begin + mid + 1; } else { end = end - mid - 1; - } - last_known_point = begin; + }*/ } return last_known_point; } -- cgit v1.3.1