math/sound-of-sorting: fix build on 14-CURRENT

The random_shuffle() function has been removed from C++17.
Use shuffle() with a suitable pseudo-random generator instead.
This commit is contained in:
Stefan Eßer 2023-06-28 12:57:44 +02:00
parent 71c970cb29
commit 2c1a536ebc
2 changed files with 75 additions and 0 deletions

View file

@ -0,0 +1,21 @@
--- src/SortAlgo.cpp.orig 2017-12-23 08:39:32 UTC
+++ src/SortAlgo.cpp
@@ -37,6 +37,7 @@
#include <numeric>
#include <limits>
#include <inttypes.h>
+#include <random>
typedef ArrayItem value_type;
@@ -1076,7 +1077,9 @@ void BogoSort(SortArray& A)
if (BogoCheckSorted(A)) break;
// pick a random permutation of indexes
- std::random_shuffle(perm.begin(), perm.end());
+ std::random_device rng;
+ std::mt19937 urng(rng());
+ std::shuffle(perm.begin(), perm.end(), urng);
// permute array in-place
std::vector<char> pmark(A.size(), 0);

View file

@ -0,0 +1,54 @@
--- src/SortArray.cpp.orig 2017-12-23 08:39:32 UTC
+++ src/SortArray.cpp
@@ -25,6 +25,7 @@
#include "SortAlgo.h"
#include <algorithm>
+#include <random>
extern void SoundAccess(size_t i);
@@ -123,7 +124,9 @@ void SortArray::FillData(unsigned int schema, size_t a
for (size_t i = 0; i < m_array.size(); ++i)
m_array[i] = ArrayItem(i+1);
- std::random_shuffle(m_array.begin(), m_array.end());
+ std::random_device rng;
+ std::mt19937 urng(rng());
+ std::shuffle(m_array.begin(), m_array.end(), urng);
}
else if (schema == 1) // Ascending [1,n]
{
@@ -150,7 +153,9 @@ void SortArray::FillData(unsigned int schema, size_t a
m_array[i] = ArrayItem(w + 1);
}
- std::random_shuffle(m_array.begin(), m_array.end());
+ std::random_device rng;
+ std::mt19937 urng(rng());
+ std::shuffle(m_array.begin(), m_array.end(), urng);
}
else if (schema == 4) // Quintic skew of [1,n]
{
@@ -167,7 +172,9 @@ void SortArray::FillData(unsigned int schema, size_t a
m_array[i] = ArrayItem(w + 1);
}
- std::random_shuffle(m_array.begin(), m_array.end());
+ std::random_device rng;
+ std::mt19937 urng(rng());
+ std::shuffle(m_array.begin(), m_array.end(), urng);
}
else if (schema == 5) // shuffled n-2 equal values in [1,n]
{
@@ -178,7 +185,9 @@ void SortArray::FillData(unsigned int schema, size_t a
}
m_array[m_array.size()-1] = ArrayItem(arraysize);
- std::random_shuffle(m_array.begin(), m_array.end());
+ std::random_device rng;
+ std::mt19937 urng(rng());
+ std::shuffle(m_array.begin(), m_array.end(), urng);
}
else // fallback
{