36 lines
851 B
C++
36 lines
851 B
C++
|
|
#include "sorter.hpp"
|
||
|
|
|
||
|
|
#include <algorithm>
|
||
|
|
#include <iterator>
|
||
|
|
|
||
|
|
namespace ae {
|
||
|
|
|
||
|
|
void sorter::sort(container& data) {
|
||
|
|
// TODO Implement your sorting algorithm
|
||
|
|
for (auto i = 1uz; i < data.placeholder_.size(); ++i) {
|
||
|
|
std::ranges::copy(data.placeholder_[i], std::back_inserter(data.placeholder_[0]));
|
||
|
|
data.placeholder_[i].clear();
|
||
|
|
}
|
||
|
|
std::ranges::sort(data.placeholder_[0]);
|
||
|
|
}
|
||
|
|
|
||
|
|
void sorter::msd_inplace_radix_sort(std::span<container::element_type> range, size_t passes, size_t digit) {
|
||
|
|
if (digit == passes) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
auto lower = std::begin(range);
|
||
|
|
auto upper = std::end(range);
|
||
|
|
|
||
|
|
for (auto element = lower; element < std::end(range);) {
|
||
|
|
// Mask out the <digit>-last bit and check if it is set
|
||
|
|
if ((*element & (1uz << sizeof(container::element_type) * 8 - digit))) {
|
||
|
|
|
||
|
|
} else {
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace ae
|