diff --git a/ypsu.cpp b/ypsu.cpp index 0f778d7..312b728 100644 --- a/ypsu.cpp +++ b/ypsu.cpp @@ -150,7 +150,7 @@ static inline uint32_t morgrab(uint32_t elem) noexcept { } template static inline void mormord_sort_impl(uint32_t *a, int n) noexcept { - /* Edge-case */ + // Early-exit the edge-case if(n == 0) return; /* Preparation */ @@ -187,13 +187,16 @@ static inline void mormord_sort_impl(uint32_t *a, int n) noexcept { uint32_t reali = 0; #pragma GCC unroll 16 for(int i = 0; i < 256; ++i) { - radics[i] += prev; if(radics[i] != 0) { + radics[i] += prev; real_radics[reali] = prev; real_radics[reali + 1] = radics[i]; + prev = radics[i]; reali += 2; + } else { + radics[i] += prev; + prev = radics[i]; } - prev = radics[i]; }