#include <iostream>
#include <vector>
#include <random>
#include <ctime>
// Function to perform Fisher-Yates Shuffle in place
void fisherYatesShuffle(std::vector<int>& arr) {
// Initialize random number generator
std::mt19937 rng(static_cast<long unsigned int>(time(0))); // Random seed based on time
// Loop through the array from last element to the second element
for (int i = arr.size() - 1; i > 0; --i) {
// Generate a random index between 0 and i
std::uniform_int_distribution<int> dist(0, i);
int j = dist(rng);
// Swap the elements at index i and index j
std::swap(arr[i], arr[j]);
}
}
int main() {
// Create a vector (array) of song IDs
std::vector<int> arr = {10, 20, 30, 40, 50};
std::cout << "Original Array: ";
for (int num : arr) {
std::cout << num << " ";
}
std::cout << "\n";
// Shuffle the array using Fisher-Yates
fisherYatesShuffle(arr);
std::cout << "Shuffled Array: ";
for (int num : arr) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8Y3RpbWU+CgovLyBGdW5jdGlvbiB0byBwZXJmb3JtIEZpc2hlci1ZYXRlcyBTaHVmZmxlIGluIHBsYWNlCnZvaWQgZmlzaGVyWWF0ZXNTaHVmZmxlKHN0ZDo6dmVjdG9yPGludD4mIGFycikgewogICAgLy8gSW5pdGlhbGl6ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgogICAgc3RkOjptdDE5OTM3IHJuZyhzdGF0aWNfY2FzdDxsb25nIHVuc2lnbmVkIGludD4odGltZSgwKSkpOyAvLyBSYW5kb20gc2VlZCBiYXNlZCBvbiB0aW1lCiAgICAKICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgYXJyYXkgZnJvbSBsYXN0IGVsZW1lbnQgdG8gdGhlIHNlY29uZCBlbGVtZW50CiAgICBmb3IgKGludCBpID0gYXJyLnNpemUoKSAtIDE7IGkgPiAwOyAtLWkpIHsKICAgICAgICAvLyBHZW5lcmF0ZSBhIHJhbmRvbSBpbmRleCBiZXR3ZWVuIDAgYW5kIGkKICAgICAgICBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxpbnQ+IGRpc3QoMCwgaSk7CiAgICAgICAgaW50IGogPSBkaXN0KHJuZyk7CiAgICAgICAgCiAgICAgICAgLy8gU3dhcCB0aGUgZWxlbWVudHMgYXQgaW5kZXggaSBhbmQgaW5kZXggagogICAgICAgIHN0ZDo6c3dhcChhcnJbaV0sIGFycltqXSk7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy8gQ3JlYXRlIGEgdmVjdG9yIChhcnJheSkgb2Ygc29uZyBJRHMKICAgIHN0ZDo6dmVjdG9yPGludD4gYXJyID0gezEwLCAyMCwgMzAsIDQwLCA1MH07CiAgICAKICAgIHN0ZDo6Y291dCA8PCAiT3JpZ2luYWwgQXJyYXk6ICI7CiAgICBmb3IgKGludCBudW0gOiBhcnIpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgbnVtIDw8ICIgIjsKICAgIH0KICAgIHN0ZDo6Y291dCA8PCAiXG4iOwogICAgCiAgICAvLyBTaHVmZmxlIHRoZSBhcnJheSB1c2luZyBGaXNoZXItWWF0ZXMKICAgIGZpc2hlcllhdGVzU2h1ZmZsZShhcnIpOwogICAgCiAgICBzdGQ6OmNvdXQgPDwgIlNodWZmbGVkIEFycmF5OiAiOwogICAgZm9yIChpbnQgbnVtIDogYXJyKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IG51bSA8PCAiICI7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgIlxuIjsKCiAgICByZXR1cm4gMDsKfQo=