इस समस्या में, हमें एक सरणी दी जाती है और हमारा कार्य सरणी को इस तरह परिवर्तित करना है कि सभी सकारात्मक संख्याएं सम सूचकांक स्थानों पर हों और सभी ऋणात्मक संख्या विषम सूचकांक स्थानों पर हों।
धनात्मक और ऋणात्मक मानों की संख्या असमान हो सकती है, इस स्थिति में, हम अतिरिक्त मानों को स्थानांतरित नहीं करेंगे।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट - {3, 5, -1, 19, -7, -2}
आउटपुट - {3, -1, 5, -7, 19, -2}
इस समस्या को हल करने के लिए, हमें उस तत्व को खोजना होगा जो सरणी में क्रम से बाहर है। इसे खोजने का एक और तरीका हो सकता है, यहां हम उनमें से दो पर चर्चा करेंगे।
विधि 1
यह विधि केवल सरणी को पार करेगी और उन तत्वों की पहली घटना का पता लगाएगी जो जगह में नहीं हैं (अर्थात सकारात्मक नहीं सम और ऋणात्मक नहीं है) और फिर उन्हें स्वैप करें। हम इस प्रक्रिया को तब तक करेंगे जब तक कि पूरे ऐरे को ट्रेस नहीं कर लिया जाता।
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
#include<iostream> using namespace std; void swapElements(int* a, int i , int j){ int temp = a[i]; a[i] = a[j]; a[j] = temp; return ; } void printArray(int* a, int n){ for(int i = 0; i<n; i++) cout<<a[i]<<"\t"; cout<<endl; return ; } void generateOrderedArray(int arr[], int n){ for(int i = 0; i <n; i++){ if(arr[i] >= 0 && i % 2 == 1){ for(int j = i + 1; j <n; j++){ if(arr[j] < 0 && j % 2 == 0){ swapElements(arr, i, j); break ; } } } else if(arr[i] < 0 && i % 2 == 0){ for(int j = i + 1; j <n; j++){ if(arr[j] >= 0 && j % 2 == 1){ swapElements(arr, i, j); break; } } } } printArray(arr, n); } int main(){ int arr[] = { 1, -3, 5, 6, -3, 6, 7, -4, 9, 10 }; int n = sizeof(arr)/sizeof(arr[0]); cout<<"Inital Array is : "; printArray(arr, n); cout<<"Array with positive numbers at even index and negative numbers at odd index :"; generateOrderedArray(arr,n); return 0; }
आउटपुट
Inital Array is : 3 5 -1 19 -7 -2 Array with positive numbers at even index and negative numbers at odd index : 3 -1 5 -7 19 -2
विधि 2
इस पद्धति में, हम एक ऐसी प्रक्रिया का उपयोग करेंगे जो एक त्वरित प्रकार की तकनीक की तरह दिखेगी। यहां, हम दो पॉइंटर्स लेंगे, एक पॉजिटिव के लिए और दूसरा नेगेटिव नंबरों के लिए। हम पॉजिटिव पॉइंटर को इंडेक्स 0 (यहां तक कि इंडेक्स) पर और नेगेटिव को इंडेक्स 1 (विषम इंडेक्स) पर सेट करेंगे। और पॉइंटर को 2 से आगे बढ़ाएँ। और जब पॉज़िटिव पॉइंटर नेगेटिव नंबरों का सामना करे और नेगेटिव पॉइंटर का पॉज़िटिव नंबरों से सामना हो तो रुक जाएँ। और फिर दोनों के रुकने पर अदला-बदली करें। यदि कोई भी सूचक सरणी अनुक्रमणिका से बाहर जाता है तो हम निष्पादन रोक देंगे।
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम
#include <iostream> using namespace std; void swapElements(int* a, int i , int j){ int temp = a[i]; a[i] = a[j]; a[j] = temp; return ; } void printArray(int *a, int n){ for (int i = 0; i <n; i++) cout<<a[i]<<"\t"; cout<<endl; } void generateOrderedArray(int a[], int size){ int positive = 0, negative = 1; while (1) { while (positive < size && a[positive] >= 0) positive += 2; while (negative <size && a[negative] <= 0) negative += 2; if (positive < size && negative < size) swapElements(a, positive, negative); else break; } } int main(){ int arr[] = { 3, 5, -1, 19, -7, -2 }; int n = (sizeof(arr) / sizeof(arr[0])); cout<<"Inital Array is : "; printArray(arr, n); cout<<"Array with positive numbers at even index and negative numbers at odd index : "; generateOrderedArray(arr, n); printArray(arr, n); return 0; }
आउटपुट
Inital Array is : 3 5 -1 19 -7 -2 Array with positive numbers at even index and negative numbers at odd index : 3 -1 5 -7 19 -2