फिशर-येट्स एल्गोरिथम सरणी तत्वों का एक यादृच्छिक क्रमपरिवर्तन उत्पन्न करता है अर्थात यह एक सरणी के सभी तत्वों को बेतरतीब ढंग से फेरबदल करता है। सरणी के लिए सभी क्रमपरिवर्तन समान रूप से होने की संभावना है क्योंकि फिशर-येट्स एल्गोरिथम निष्पक्ष है।
C++ में सरणी फेरबदल के लिए फिशर-येट्स एल्गोरिथम को लागू करने का कार्यक्रम इस प्रकार दिया गया है -
उदाहरण
#include <iostream> #include <t;stdlib.h> 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; 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
उपरोक्त कार्यक्रम में, उपयोगकर्ता से सरणी के आकार और सरणी का अनुरोध किया जाता है। यह नीचे दिया गया है -
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];
सरणी प्राप्त होने के बाद, index_arr [] को 0 से प्रारंभ किया जाता है। फिर रैंड () फ़ंक्शन का उपयोग arr [] के मानों को arr1 [] में बेतरतीब ढंग से संग्रहीत करने के लिए किया जाता है। यह निम्नलिखित कोड स्निपेट द्वारा प्रदर्शित किया जाता है -
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] << " ";