इस समस्या में, हमें n / 2 सम मानों और n / 2 विषम मानों से मिलकर n आकार का एक arr [] दिया जाता है। हमारा कार्य सम सूचकांक पर सम संख्याओं और विषम संख्याओं को विषम सूचकांक पर रखने के लिए एक प्रोग्राम बनाना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: गिरफ्तारी [] ={5, 1, 6, 4, 3, 8}
आउटपुट: गिरफ्तारी [] ={6, 1, 5, 4, 3, 8}
समाधान दृष्टिकोण -
एक समाधान सरणी का पता लगाएगा और फिर अंतिम संख्या ज्ञात करेगा जो सम स्थिति में नहीं है और इसे अगले ऑफ प्लेस वैल्यू के साथ बदल दिया जाएगा। यह एक आशाजनक समाधान है लेकिन समाधान को दो अनुक्रमितों का उपयोग करके एक सम और एक विषम के लिए उपयोग करके अधिक कुशल बनाया जा सकता है। यदि सम सूचकांक पर कोई तत्व है जो सम नहीं है और एक विषम तत्व जो विषम सूचकांक पर नहीं है, तो हम उन्हें स्वैप करेंगे अन्यथा दोनों सूचकांकों को दो से बढ़ा देंगे।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <iostream> using namespace std; void O_EReshuffle(int arr[], int n) { int oIndex = 1; int eIndex = 0; for(int i = 0; i < n; ) { while (eIndex < n && arr[eIndex] % 2 == 0) eIndex += 2; while (oIndex < n && arr[oIndex] % 2 == 1) oIndex += 2; if (eIndex < n && oIndex < n) swap (arr[eIndex], arr[oIndex]); else break; } } int main() { int arr[] = { 5, 1, 6, 4, 3, 8 }; int n = sizeof(arr) / sizeof(arr[0]); cout << "Array before Reshuffling: "; for(int i = 0; i < n ; i++){ cout<<arr[i]<<"\t"; } O_EReshuffle(arr, n); cout<<"\nArray after Reshuffling: "; for(int i = 0; i < n ; i++){ cout<<arr[i]<<"\t"; }; return 0; }
आउटपुट -
Array before Reshuffling: 5 1 6 4 3 8 Array after Reshuffling: 4 1 6 5 8 3