इस समस्या में, हमें आकार n की एक सरणी arr[] दी गई है जिसमें n/2 सम मान और n/2 विषम मान हैं। हमारा कार्य सम संख्याओं को सम सूचकांक पर और विषम संख्याओं को विषम सूचकांक पर रखने के लिए एक प्रोग्राम बनाना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: arr[] = {5, 1, 6, 4, 3, 8}
आउटपुट: arr[] = {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