फिशर-येट्स एल्गोरिदम
फिशर-येट्स एल्गोरिदम ऐरे तत्वों का यादृच्छिक क्रमपरिवर्तन उत्पन्न करता है, यानी यह ऐरे के सभी तत्वों को निष्पक्ष रूप से शफल करता है। सभी क्रमपरिवर्तन समान रूप से संभावित होते हैं।
C++ प्रोग्राम उदाहरण
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
int n;
cout << "Enter the array size: " << endl;
cin >> n;
int arr[n], arr1[n], index_arr[n];
int index;
cout << "Enter the array elements: " << endl;
for (int i = 0; i < n; i++)
cin >> arr[i];
for (int i = 0; i < n; i++)
index_arr[i] = 0;
// बेहतर यादृच्छिकता के लिए srand का उपयोग
srand(time(0));
for (int i = 0; i < n; i++) {
do {
index = rand() % n;
} while (index_arr[index] != 0);
index_arr[index] = 1;
arr1[i] = arr[index];
}
cout << "The shuffled array is: ";
for (int i = 0; i < n; i++)
cout << arr1[i] << " ";
return 0;
}
आउटपुट
Enter the array size: 10 Enter the array elements: 1 2 3 4 5 6 7 8 9 10 The shuffled array is: 4 7 8 6 3 10 2 1 9 5
कोड व्याख्या
ऐरे इनपुट
उपयोगकर्ता से ऐरे का आकार और तत्व लिए जाते हैं।
शफलिंग तर्क
index_arr सरणी ट्रैक करती है कि कौन से सूचकांक पहले ही उपयोग किए जा चुके हैं। rand() फ़ंक्शन यादृच्छिक सूचकांक उत्पन्न करता है, और do-while लूप सुनिश्चित करता है कि प्रत्येक सूचकांक केवल एक बार उपयोग किया जाए।
नोट
आधुनिक C++ में <random> हेडर और std::shuffle का उपयोग करना अधिक बेहतर और निष्पक्ष होता है।