@@ -76,8 +76,11 @@ struct RadixSorter
76
76
// prefix sum
77
77
std::inclusive_scan (histogram,histogram+histogram_size,histogram);
78
78
// scatter
79
- for (histogram_t i=0u ; i<rangeSize; i++)
79
+ for (histogram_t i=rangeSize; i!=0u ;)
80
+ {
81
+ i--;
80
82
output[--histogram[comp.operator ()<shift,radix_mask>(input[i])]] = input[i];
83
+ }
81
84
82
85
if constexpr (pass_ix != last_pass)
83
86
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
98
101
if (rangeSize<static_cast <decltype (rangeSize)>(0x1ull <<16ull ))
99
102
return impl::RadixSorter<KeyAccessor::key_bit_count,uint16_t >()(input,scratch,static_cast <uint16_t >(rangeSize),comp);
100
103
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);
102
105
else
103
106
return impl::RadixSorter<KeyAccessor::key_bit_count,size_t >()(input,scratch,rangeSize,comp);
104
107
}
0 commit comments