हमें एक पूर्णांक प्रकार की सरणी दी गई है जिसमें धनात्मक और ऋणात्मक दोनों संख्याएँ हैं, मान लें, किसी भी आकार का arr[]। कार्य एक सरणी को इस तरह से पुनर्व्यवस्थित करना है कि एक सकारात्मक संख्या होगी जो नकारात्मक संख्याओं से घिरी होगी। यदि अधिक धनात्मक और ऋणात्मक संख्याएँ हैं, तो उन्हें एक सरणी के अंत में व्यवस्थित किया जाएगा।
आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें -
इनपुट - int arr[] ={-1, -2, -3, 1, 2, 3}
आउटपुट - व्यवस्था से पहले सरणी:-1 -2 -3 1 2 3 ओ (1) अतिरिक्त स्थान के साथ सकारात्मक और नकारात्मक वस्तुओं को वैकल्पिक रूप से एक सरणी का पुनर्व्यवस्था है:-1 1 -2 2 -3 3
स्पष्टीकरण - हमें आकार 6 का एक पूर्णांक सरणी दिया जाता है जिसमें सकारात्मक और नकारात्मक दोनों तत्व होते हैं। अब, हम सरणी को इस तरह से पुनर्व्यवस्थित करेंगे कि सभी सकारात्मक तत्व नकारात्मक तत्वों से घिरे रहेंगे और सभी अतिरिक्त तत्व एक सरणी के अंत में जोड़े जाएंगे यानी -1 1 -2 2 -3 3 अंतिम होगा परिणाम।
इनपुट - int arr[] ={-1, -2, -3, 1, 2, 3, 5, 5, -5, 3, 1, 1};
आउटपुट - व्यवस्था से पहले सरणी:-1 -2 -3 1 2 3 5 5 -5 3 1 1 ओ (1) अतिरिक्त स्थान के साथ सकारात्मक और नकारात्मक वस्तुओं को वैकल्पिक रूप से एक सरणी का पुनर्व्यवस्था है:-1 1 -2 2 -3 3 -5 5 5 3 1 1
स्पष्टीकरण - हमें आकार 12 का एक पूर्णांक सरणी दिया जाता है जिसमें सकारात्मक और नकारात्मक दोनों तत्व होते हैं। अब, हम सरणी को इस तरह से पुनर्व्यवस्थित करेंगे कि सभी सकारात्मक तत्व नकारात्मक तत्वों से घिरे रहेंगे और सभी अतिरिक्त तत्व एक सरणी के अंत में जोड़े जाएंगे यानी -1 1 -2 2 -3 3 -5 5 5 3 1 1 अंतिम परिणाम होगा।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
पूर्णांक प्रकार के तत्वों की एक सरणी इनपुट करें और एक सरणी के आकार की गणना करें।
-
FOR लूप का उपयोग करके पुनर्व्यवस्था क्रिया करने से पहले एक सरणी प्रिंट करें।
-
एक पैरामीटर के रूप में सरणी और आकार को पास करके फ़ंक्शन को पुनर्व्यवस्था (गिरफ्तारी, आकार) पर कॉल करें।
-
समारोह के अंदर पुनर्व्यवस्था (गिरफ्तारी, आकार)
-
एक पूर्णांक चर 'ptr' घोषित करें और इसे -1 से प्रारंभ करें।
-
I से 0 तक के लिए लूप प्रारंभ करें जब तक कि i आकार से कम न हो। लूप के अंदर, IF ptr 0 से अधिक की जाँच करें, फिर IF arr [i] 0 से अधिक और arr [ptr] 0 से कम या arr [i] 0 से कम और arr [ptr] 0 से अधिक की जाँच करें, फिर फ़ंक्शन पर कॉल करें move_array (arr, size, ptr, i) और चेक करें कि IF i - ptr 2 से बड़ा है तो ptr को ptr + 2 पर सेट करें। ELSE, ptr को -1 पर सेट करें।
-
IF ptr से -1 की जाँच करें, फिर arr[i] 0 से बड़ा और !(i &0x01) या (arr[i] 0 से कम) और (i और 0x01) की जाँच करें, फिर ptr को i पर सेट करें।
-
-
फ़ंक्शन के अंदर move_array(int arr[], int size, int ptr, int temp)
-
एक वेरिएबल को टाइप कैरेक्टर के 'ch' के रूप में घोषित करें और इसे arr[temp] के साथ सेट करें।
-
i से temp तक के लिए लूप प्रारंभ करें जब तक कि i ptr से बड़ा न हो जाए। लूप के अंदर, arr[i] को arr[i - 1] के साथ सेट करें।
-
गिरफ्तारी [ptr] को ch पर सेट करें।
-
उदाहरण
#include <iostream> #include <assert.h> using namespace std; void move_array(int arr[], int size, int ptr, int temp){ char ch = arr[temp]; for(int i = temp; i > ptr; i--){ arr[i] = arr[i - 1]; } arr[ptr] = ch; } void Rearrangement(int arr[], int size){ int ptr = -1; for(int i = 0; i < size; i++){ if (ptr >= 0){ if(((arr[i] >= 0) && (arr[ptr] < 0)) || ((arr[i] < 0) && (arr[ptr] >= 0))){ move_array(arr, size, ptr, i); if(i - ptr >= 2){ ptr = ptr + 2; } else{ ptr = -1; } } } if(ptr == -1){ if (((arr[i] >= 0) && (!(i & 0x01))) || ((arr[i] < 0) && (i & 0x01))){ ptr = i; } } } } int main(){ //input an array int arr[] = {-1, -2, -3, 1, 2, 3}; int size = sizeof(arr) / sizeof(arr[0]); //print the original Array cout<<"Array before Arrangement: "; for (int i = 0; i < size; i++){ cout << arr[i] << " "; } //calling the function to rearrange the array Rearrangement(arr, size); //print the array after rearranging the values cout<<"\nRearrangement of an array in alternating positive & negative items with O(1) extra space is: "; for(int i = 0; i < size; i++){ cout<< arr[i] << " "; } return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा
Array before Arrangement: -1 -2 -3 1 2 3 Rearrangement of an array in alternating positive & negative items with O(1) extra space is: -1 1 -2 2 -3 3