मान लीजिए कि हमारे पास n तत्वों के साथ एक सरणी A है (n विषम है)। ए में पहली अप्राकृतिक संख्याओं का क्रमपरिवर्तन होता है। चलो एक फ़ंक्शन है f(i) यह 0 से n-2 की सीमा में एकल तर्क i लेता है, और ऑपरेशन करता है:यदि A[i]> A[i+1], A[i] और A[ के मानों को स्वैप करें मैं +1]। सरणी ए को पहली बार क्रमबद्ध करने के लिए हमें पुनरावृत्तियों की संख्या गिननी होगी।
इसलिए, यदि इनपुट ए =[4, 5, 7, 1, 3, 2, 6] जैसा है, तो आउटपुट 5 होगा, क्योंकि प्रत्येक पुनरावृत्ति के बाद सरणी इस प्रकार है:[4, 5, 1, 7, 2, 3, 6], [4, 1, 5, 2, 7, 3, 6], [1, 4, 2, 5, 3, 7, 6], [1, 2, 4, 3, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7]।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
n :=Af का आकार :=0Ans :=0इनिशियलाइज़ करने के लिए Ans :=0, do:f :=0 इनिशियलाइज़ j :=0 के लिए, जब jA[j + 1], तो:f :=1 यदि f गैर-शून्य नहीं है, तो:प्रारंभ करने के लिए लूप से बाहर आएं j :=(Ans AND 1), जब j A[j + 1], तो:A[j] और A[j + 1] स्वैप करें (Ans को 1 से बढ़ाएं) पूर्व> उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#includeनेमस्पेस std का उपयोग करना;इंट सॉल्व (वेक्टर A){ int n =A.size(); बूल एफ =0; इंट उत्तर =0; के लिए (Ans =0;;){ f =0; के लिए (इंट जे =0; जे <एन -1; जे ++) अगर (ए [जे]> ए [जे + 1]) एफ =1; अगर (! एफ) तोड़; के लिए (int j =(Ans &1); j A[j + 1]) स्वैप (A[j], A[j + 1]); उत्तर++; } वापसी Ans;}int main(){ वेक्टर A ={ 4, 5, 7, 1, 3, 2, 6}; cout <<हल (A) < इनपुट
{ 4, 5, 7, 1, 3, 2, 6 }आउटपुट
5