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

C++ में दिए गए सॉर्टिंग एल्गोरिदम के विफल होने का केस प्रिंट करना


इस समस्या में, हमें एक सॉर्टिंग एल्गोरिदम और एक संख्या n दी गई है। हमारा कार्य n तत्वों का एक ऐसा ऐरे प्रिंट करना है जिसे एल्गोरिदम सॉर्ट न कर सके, यानी एल्गोरिदम विफल हो जाए।

एल्गोरिदम

loop i from 1 to n-1
    loop j from i to n-1
        if a[j] > a[i+1]
            swap(a[i], a[j+1])

आइए इस सॉर्टिंग एल्गोरिदम को देखें। यह दो नेस्टेड लूप का उपयोग करता है। बाहरी लूप 1 से n-1 तक चलता है और आंतरिक लूप i से n-1 तक। प्रत्येक इटरेशन में यह आंतरिक लूप के एलिमेंट और बाहरी लूप के एलिमेंट की जांच करता है और आउट-ऑफ-ऑर्डर एलिमेंट्स को स्वैप करता है।

यह एल्गोरिदम उस केस में विफल होगा जहां एलिमेंट्स रिवर्स ऑर्डर में सॉर्टेड हों। साथ ही, हम केवल तभी समाधान ढूंढ सकते हैं जब n ≤ 2 हो।

इसलिए, n = 5 के लिए। आउटपुट: 5 4 3 2 1
टाइम कॉम्प्लेक्सिटी - O(N)

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने वाला कोड:

#include <iostream> 
using namespace std; 

void invalidCase(int n) { 
    if (n <= 2) { 
        cout << -1; 
        return; 
    } 
    for (int i = n; i >= 1; i--) 
        cout << i << " "; 
} 

int main() { 
    int n = 6; 
    cout << "The case in which the algorithm goes invalid for " << n << " element array is :\n"; 
    invalidCase(n); 
    return 0; 
}

आउटपुट

The case in which the algorithm goes invalid for 6 element array is -

6 5 4 3 2 1

  1. - C++ में दी गई रेंज में M से विभाज्य संख्याओं की गिनती

    हमें तीन संख्याएं A, B और M दी गई हैं। A और B संख्याओं की रेंज [A, B] को परिभाषित करते हैं। लक्ष्य A और B के बीच उन संख्याओं को गिनना है जो M से विभाज्य हैं। हम i=A से शुरू करके M के पहले गुणक तक जाएंगे। यदि i%M=0 तो काउंट बढ़ाएंगे। अब i को तब तक बढ़ाएंगे जब तक i<=B और काउंट बढ़ाएंगे। आइए उदाहरणों स

  1. - C++ में दी गई रेंज [L, R] में सभी तत्वों का XOR

    इस समस्या में, हमें दो पूर्णांक L और R दिए गए हैं जो एक रेंज को दर्शाते हैं। हमारा कार्य रेंज [L, R] के भीतर सभी तत्वों का XOR खोजना है। आइए एक उदाहरण से समस्या को समझते हैं, इनपुट - L=3, R=6 व्याख्या - 3^4^5^6 = इस समस्या को हल करने के लिए, हम R का MSB ढूंढेंगे। उत्तर का MSB R से अधिक नहीं होगा।

  1. C++ में दिए गए मैट्रिक्स को काउंटर-क्लॉकवाइज स्पाइरल फॉर्म में प्रिंट करना C++ में दिए गए मैट्रिक्स को काउंटर-क्लॉकवाइज स्पाइरल फॉर्म में प्रिंट करना

    इस समस्या में, हमें एक 2-डायमेंशनल मैट्रिक्स दिया गया है। और हमारा कार्य मैट्रिक्स के एलिमेंट्स को काउंटर-क्लॉकवाइज स्पाइरल फॉर्म में प्रिंट करना है। काउंटरक्लॉकवाइज स्पाइरल फॉर्म यह एक स्पाइरल ट्रैवर्सल है जो टॉप-लेफ्ट से शुरू होता है और फिर काउंटर-क्लॉकवाइज दिशा में पहले बॉटम-राइट-अप-लेफ्ट की ओर