fix bogo/bozo_sort implementation

This commit is contained in:
bolero-MURAKAMI 2016-03-29 18:13:09 +09:00
parent b5699163e8
commit 99860f4bc7
2 changed files with 6 additions and 4 deletions

View file

@ -9,6 +9,7 @@
#define SPROUT_ALGORITHM_CXX14_BOGO_SORT_HPP #define SPROUT_ALGORITHM_CXX14_BOGO_SORT_HPP
#include <sprout/config.hpp> #include <sprout/config.hpp>
#include <sprout/utility/forward.hpp>
#include <sprout/algorithm/is_sorted.hpp> #include <sprout/algorithm/is_sorted.hpp>
#include <sprout/algorithm/cxx14/shuffle.hpp> #include <sprout/algorithm/cxx14/shuffle.hpp>
@ -20,14 +21,14 @@ namespace sprout {
inline SPROUT_CXX14_CONSTEXPR void inline SPROUT_CXX14_CONSTEXPR void
bogo_sort(RandomAccessIterator first, RandomAccessIterator last, UniformRandomNumberGenerator&& g) { bogo_sort(RandomAccessIterator first, RandomAccessIterator last, UniformRandomNumberGenerator&& g) {
while (!sprout::is_sorted(first, last)) { while (!sprout::is_sorted(first, last)) {
sprout::shuffle(first, last, g); sprout::shuffle(first, last, SPROUT_FORWARD(UniformRandomNumberGenerator, g));
} }
} }
template<typename RandomAccessIterator, typename UniformRandomNumberGenerator, typename Compare> template<typename RandomAccessIterator, typename UniformRandomNumberGenerator, typename Compare>
inline SPROUT_CXX14_CONSTEXPR void inline SPROUT_CXX14_CONSTEXPR void
bogo_sort(RandomAccessIterator first, RandomAccessIterator last, UniformRandomNumberGenerator&& g, Compare comp) { bogo_sort(RandomAccessIterator first, RandomAccessIterator last, UniformRandomNumberGenerator&& g, Compare comp) {
while (!sprout::is_sorted(first, last, comp)) { while (!sprout::is_sorted(first, last, comp)) {
sprout::shuffle(first, last, g); sprout::shuffle(first, last, SPROUT_FORWARD(UniformRandomNumberGenerator, g));
} }
} }
} // namespace sprout } // namespace sprout

View file

@ -9,6 +9,7 @@
#define SPROUT_ALGORITHM_CXX14_BOZO_SORT_HPP #define SPROUT_ALGORITHM_CXX14_BOZO_SORT_HPP
#include <sprout/config.hpp> #include <sprout/config.hpp>
#include <sprout/utility/forward.hpp>
#include <sprout/algorithm/is_sorted.hpp> #include <sprout/algorithm/is_sorted.hpp>
#include <sprout/algorithm/cxx14/random_swap.hpp> #include <sprout/algorithm/cxx14/random_swap.hpp>
@ -20,14 +21,14 @@ namespace sprout {
inline SPROUT_CXX14_CONSTEXPR void inline SPROUT_CXX14_CONSTEXPR void
bozo_sort(RandomAccessIterator first, RandomAccessIterator last, UniformRandomNumberGenerator&& g) { bozo_sort(RandomAccessIterator first, RandomAccessIterator last, UniformRandomNumberGenerator&& g) {
while (!sprout::is_sorted(first, last)) { while (!sprout::is_sorted(first, last)) {
sprout::random_swap(first, last, g); sprout::random_swap(first, last, SPROUT_FORWARD(UniformRandomNumberGenerator, g));
} }
} }
template<typename RandomAccessIterator, typename UniformRandomNumberGenerator, typename Compare> template<typename RandomAccessIterator, typename UniformRandomNumberGenerator, typename Compare>
inline SPROUT_CXX14_CONSTEXPR void inline SPROUT_CXX14_CONSTEXPR void
bozo_sort(RandomAccessIterator first, RandomAccessIterator last, UniformRandomNumberGenerator&& g, Compare comp) { bozo_sort(RandomAccessIterator first, RandomAccessIterator last, UniformRandomNumberGenerator&& g, Compare comp) {
while (!sprout::is_sorted(first, last, comp)) { while (!sprout::is_sorted(first, last, comp)) {
sprout::random_swap(first, last, g); sprout::random_swap(first, last, SPROUT_FORWARD(UniformRandomNumberGenerator, g));
} }
} }
} // namespace sprout } // namespace sprout