を繰り返す。非常に効率悪
#include
#include
#include
#include
namespace a5ua
{
// 0 ~ n - 1 の整数乱数
int random(int n)
{
return static_cast(std::rand() / static_cast(RAND_MAX + 1) * n);
}
// 昇順にソート済みかどうか判定
template
bool is_sorted(InIt first, InIt last)
{
if (first == last) {
return true;
}
InIt next = first;
for (++next ; next != last; ++first, ++next) {
if (!(*first
void bozo_sort(InIt first, InIt last)
{
const int n = std::distance(first, last);
while (!is_sorted(first, last)) {
InIt i = first;
InIt j = first;
std::advance(i, random(n));
std::advance(j, random(n));
std::swap(*i, *j);
}
}
}
#include
#include
#include
#include
int main()
{
std::srand(static_cast(std::time(0)));
std::vector v(5);
std::generate(v.begin(), v.end(), &std::rand);
std::copy(v.begin(), v.end(), std::ostream_iterator(std::cout, " "));
std::cout (std::cout, " "));
std::cout << "\n";
return 0;
}
・乱数の発生確率が一様になっていないのを修正
・同じ数があると一生終わらないので、比較を<=に変更