वेक्टर को शफ़ल करने के लिए फिशर-येट्स शफ़ल एल्गोरिदम का उपयोग किया जाता है।
इस एल्गोरिदम में, वेक्टर का एक लीनियर स्कैन किया जाता है और फिर प्रत्येक एलिमेंट को शेष सभी एलिमेंट्स (स्वयं सहित) में से एक रैंडम एलिमेंट के साथ स्वैप किया जाता है।
एल्गोरिदम
शुरुआत
show() फ़ंक्शन घोषित करें
show() फ़ंक्शन में वेक्टर के कंस्ट्रक्टर को पैरामीटर के रूप में पास करें
for (auto const& i: input)
वेरिएबल i का मान प्रिंट करें
वेक्टर v घोषित करें
v वेक्टर में कुछ मान इनिशियलाइज़ करें
integer डेटाटाइप का size वेरिएबल घोषित करें
size() फ़ंक्शन कॉल करके वेक्टर का साइज़ प्राप्त करें
size = v.size() इनिशियलाइज़ करें
for (int i = 0; i < size - 1; i++)
int j = i + rand() % (size - i)
swap() फ़ंक्शन कॉल करके v[i] और v[j] के मान स्वैप करें
"शफ़ल होने के बाद एलिमेंट्स:" प्रिंट करें
v वेक्टर के शफ़ल मान दिखाने के लिए show() फ़ंक्शन कॉल करें
समाप्ति
उदाहरण कोड
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;
void show(vector<int> const &input) {
for (auto const& i: input) {
std::cout << i << " ";
}
}
int main() {
vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int size = v.size();
for (int i = 0; i < size - 1; i++) {
int j = i + rand() % (size - i);
swap(v[i], v[j]);
}
cout << "शफ़ल होने के बाद एलिमेंट्स:" << endl;
show(v);
return 0;
}
आउटपुट
शफ़ल होने के बाद एलिमेंट्स: 2 8 5 3 1 9 4 7 6
नोट: बेहतर रैंडमनेस के लिए आधुनिक C++ में
std::shuffleके साथstd::mt19937का उपयोग करने की सलाह दी जाती है।