हमें एक पूर्णांक प्रकार की सरणी दी गई है जिसमें धनात्मक और ऋणात्मक दोनों संख्याएँ हैं, मान लीजिए, किसी भी आकार का arr[]। कार्य एक सरणी को इस तरह से पुनर्व्यवस्थित करना है कि सभी सकारात्मक और नकारात्मक संख्याएं वैकल्पिक स्थिति में हों और यदि अतिरिक्त सकारात्मक या नकारात्मक तत्व हैं तो उन्हें एक सरणी के अंत में रखा जाएगा।
आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें -
इनपुट - int arr[] ={4, 2, -1, -1, 6, -3}
आउटपुट - O(n) समय और O(1) अतिरिक्त स्थान में धनात्मक और ऋणात्मक संख्याओं की पुनर्व्यवस्था है:2 - 1 6 -1 4 -3
स्पष्टीकरण - हमें आकार 6 का एक पूर्णांक सरणी दिया जाता है जिसमें सकारात्मक और नकारात्मक दोनों तत्व होते हैं। अब, हम सरणी को इस तरह से पुनर्व्यवस्थित करेंगे कि सभी सकारात्मक तत्व और नकारात्मक तत्व एक वैकल्पिक स्थिति में हों और सभी अतिरिक्त तत्व एक सरणी के अंत में जोड़े जाएंगे यानी 2 -1 6 -1 4 -3 होंगे अंतिम परिणाम
इनपुट - int arr[] ={-1, -2, -3, 1, 2, 3, 5, 5, -5, 3, 1, 1}
आउटपुट - O(n) समय और O(1) अतिरिक्त स्थान में धनात्मक और ऋणात्मक संख्याओं की पुनर्व्यवस्था है:2 - 2 3 -5 5 -3 5 -1 1 3 1 1
स्पष्टीकरण - हमें आकार 12 का एक पूर्णांक सरणी दिया जाता है जिसमें सकारात्मक और नकारात्मक दोनों तत्व होते हैं। अब, हम सरणी को इस तरह से पुनर्व्यवस्थित करेंगे कि सभी सकारात्मक तत्व और नकारात्मक तत्व एक वैकल्पिक स्थिति में हों और सभी अतिरिक्त तत्व एक सरणी के अंत में जोड़े जाएंगे यानी 2 -2 3 -5 5 -3 5 -1 1 3 1 1 अंतिम परिणाम होगा
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
पूर्णांक प्रकार के तत्वों की एक सरणी इनपुट करें और एक सरणी के आकार की गणना करें।
-
FOR लूप का उपयोग करके पुनर्व्यवस्था क्रिया करने से पहले एक सरणी प्रिंट करें।
-
एक पैरामीटर के रूप में सरणी और सरणी के आकार को पास करके फ़ंक्शन को पुनर्व्यवस्था (गिरफ्तारी, आकार) पर कॉल करें।
-
समारोह के अंदर पुनर्व्यवस्था (गिरफ्तारी, आकार)
-
अस्थायी पूर्णांक प्रकार चर घोषित करें अर्थात अस्थायी से -1, धनात्मक से अस्थायी + 1 और ऋणात्मक से 0.
-
किसी सरणी के आकार से कम होने तक i से 0 तक के लिए लूप प्रारंभ करें। लूप के अंदर, IF arr[i] 0 से कम की जाँच करें, फिर टेम्प को 1 से बढ़ाएँ और C++ STL की इनबिल्ट विधि को कॉल करें यानी स्वैप (arr[temp], arr[i]) और arr[temp] और arr[i को पास करें। ] एक पैरामीटर के रूप में।
-
एक सरणी के आकार से सकारात्मक कम और सकारात्मक से कम और एआर [नकारात्मक] 0 से कम होने पर लूप शुरू करें। लूप के अंदर, एआर [नकारात्मक] और एआर [पॉजिटिव] को पैरामीटर के रूप में पास करके स्वैप कॉल करें। धनात्मक को 1 से बढ़ाएँ और ऋणात्मक को ऋणात्मक + 2 पर सेट करें।
-
-
परिणाम प्रिंट करें।
उदाहरण
#include <bits/stdc++.h> using namespace std; void Rearrangement(int arr[], int size){ int temp = -1; for(int i = 0; i < size; i++){ if (arr[i] < 0){ temp++; swap(arr[temp], arr[i]); } } int positive = temp + 1; int negative = 0; while(positive < size && negative < positive && arr[negative] < 0){ swap(arr[negative], arr[positive]); positive++; negative = negative + 2; } } int main(){ int arr[] = {4, 2, -1, -1, 6, -3}; int size = sizeof(arr)/sizeof(arr[0]); //calling the function to rearrange the array Rearrangement(arr, size); //print the array after rearranging the values cout<<"Rearrangement of positive and negative numbers in O(n) time and O(1) extra space is: "; for(int i = 0; i < size; i++){ cout<< arr[i] << " "; } return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा
Rearrangement of positive and negative numbers in O(n) time and O(1) extra space is: 2 -1 6 -1 4 -3