@@ -76,8 +76,11 @@ struct RadixSorter
7676 // prefix sum
7777 std::inclusive_scan (histogram,histogram+histogram_size,histogram);
7878 // scatter
79- for (histogram_t i=0u ; i<rangeSize; i++)
79+ for (histogram_t i=rangeSize; i!=0u ;)
80+ {
81+ i--;
8082 output[--histogram[comp.operator ()<shift,radix_mask>(input[i])]] = input[i];
83+ }
8184
8285 if constexpr (pass_ix != last_pass)
8386 return pass<RandomIt,KeyAccessor,pass_ix+1ull >(output,input,rangeSize,comp);
@@ -98,7 +101,7 @@ inline RandomIt radix_sort(RandomIt input, RandomIt scratch, const size_t rangeS
98101 if (rangeSize<static_cast <decltype (rangeSize)>(0x1ull <<16ull ))
99102 return impl::RadixSorter<KeyAccessor::key_bit_count,uint16_t >()(input,scratch,static_cast <uint16_t >(rangeSize),comp);
100103 if (rangeSize<static_cast <decltype (rangeSize)>(0x1ull <<32ull ))
101- return impl::RadixSorter<KeyAccessor::key_bit_count,uint32_t >()(input,scratch,static_cast <uint16_t >(rangeSize),comp);
104+ return impl::RadixSorter<KeyAccessor::key_bit_count,uint32_t >()(input,scratch,static_cast <uint32_t >(rangeSize),comp);
102105 else
103106 return impl::RadixSorter<KeyAccessor::key_bit_count,size_t >()(input,scratch,rangeSize,comp);
104107}
0 commit comments