Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में ओ (1) अतिरिक्त स्थान के साथ सकारात्मक और नकारात्मक वस्तुओं को वैकल्पिक करने में सरणी को पुनर्व्यवस्थित करें

हमें एक पूर्णांक प्रकार की सरणी दी गई है जिसमें धनात्मक और ऋणात्मक दोनों संख्याएँ हैं, मान लें, किसी भी आकार का 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

  1. उदाहरण के साथ सी ++ एसटीएल में ऐरे डेटा ()

    सरणी निरंतर स्मृति स्थानों में संग्रहीत समान डेटा प्रकार के तत्वों का संग्रह है। सी ++ मानक पुस्तकालय में कई पुस्तकालय हैं जो सरणी के कामकाज का समर्थन करते हैं। उनमें से एक सरणी डेटा () विधि है। सी ++ में सरणी डेटा () ऑब्जेक्ट के पहले तत्व की ओर इशारा करते हुए एक पॉइंटर देता है। सिंटैक्स array_nam

  1. सी ++ में प्रमुख आवृत्तियों वाले ऐरे तत्व?

    सरणी समान डेटा प्रकार के तत्वों का एक कंटेनर है। प्राइम फ़्रीक्वेंसी इसका मतलब है कि सरणी के तत्व की घटना की संख्या एक प्रमुख संख्या है। तो, इन परिभाषाओं के आधार पर अभाज्य आवृत्तियों वाले सरणी तत्वों को खोजने में समस्या। हमें सरणी की एक स्ट्रिंग दी गई है। हमें वर्णों की आवृत्ति का पता लगाना होगा

  1. सी ++ में एक उत्पाद सरणी पहेली (ओ (1) स्पेस)?

    यहां हम सरणी से संबंधित एक दिलचस्प समस्या देखेंगे। n तत्वों के साथ एक सरणी है। हमें n तत्वों की एक और सरणी बनानी है। लेकिन दूसरी सरणी की i-वें स्थिति i-वें तत्व को छोड़कर पहले सरणी के सभी तत्वों का गुणनफल धारण करेगी। और एक बाधा यह है कि हम इस समस्या में डिवीजन ऑपरेटर का उपयोग नहीं कर सकते हैं। हमें