TOP

基数排序的优雅实现
2019-07-09 00:10:29 】 浏览:40
Tags:基数 排序 优雅 实现

明天补充

 

 1 template <typename It, typename Radix>
 2 void radix_sort(It _begin, It _end, Radix _radix, int _pass)
 3 {
 4     auto begin = _begin;
 5     std::vector<std::vector<std::remove_reference_t<decltype(*_begin)>>> temp0(_radix()), temp1(_radix());
 6     auto src = &temp0;
 7     auto dst = &temp1;
 8     for (; begin != _end; ++begin)
 9         (*src)[_radix(*begin, 0)].push_back(*begin);
10     for (int pass = 1; pass != _pass; ++pass)
11     {
12         for (auto& v : *dst)
13             v.clear();
14         for (const auto& v: *src)
15             for (const auto& i : v)
16                 (*dst)[_radix(i, pass)].push_back(i);
17         std::swap(src, dst);
18     }
19     for (const auto& v : *src)
20         for (const auto& i : v)
21         {
22             *_begin = i;
23             ++_begin;
24         }
25 }

 


基数排序的优雅实现 https://www.cppentry.com/bencandy.php?fid=49&id=227411

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Qt之股票组件-自选股--列表可以拖.. 下一篇DFS(二):骑士游历问题