आप इसे O(n)
(जहाँ) कर सकते हैंn
अंकों की संख्या है) इस तरह से कर सकते हैं:
दाईं ओर से शुरू करते हुए, आप पहले जोड़े के अंकों को ऐसे पाते हैं कि बायां अंक दाएं अंकों से छोटा होता है। आइए "अंक-एक्स" द्वारा बाईं ओर के अंक को देखें। अंक-x के दाईं ओर अंक-x की तुलना में सबसे बड़ी संख्या ज्ञात करें, और इसे तुरंत अंक-x के बाईं ओर रखें। अंत में, शेष अंकों को आरोही क्रम में क्रमबद्ध करें - चूंकि वे पहले से ही अवरोही क्रम में थे , इसलिए आपको केवल उन्हें उल्टा करने की आवश्यकता है (अंक-एक्स के लिए सहेजें, जिसे सही जगह पर रखा जा सकता है।O(n)
) ।
एक उदाहरण इसे और अधिक स्पष्ट करेगा:
123456784987654321
एक नंबर से शुरू करें
123456784 987654321
^ दाएं से पहला स्थान जहां बाएं-अंक दाएं से कम है
अंक "x" 4 है
123456784 987654321
^ सबसे छोटे अंक को दाईं ओर 4 से बड़ा पाते हैं
123456785 4 98764321
^ इसे 4 के बाईं ओर रखें
123456785 4 12346789
123456785123446789
^ अंकों को दायीं ओर छाँटें 5. चूंकि उनमें से सभी को छोड़कर
'4' पहले से ही अवरोही क्रम में थे, हमें बस इतना करना चाहिए
उनके आदेश को उल्टा करें, और '4' के लिए सही जगह ढूंढें।
शुद्धता का प्रमाण:
अंकों के लिए अंक और निचले मामले को परिभाषित करने के लिए पूंजी अक्षरों का उपयोग करें। वाक्यविन्यास का AB
अर्थ है "तार का संघात A
और B
" । <
लेक्सोग्राफिक ऑर्डरिंग है, जो पूर्णांक क्रम के समान है जब अंक-स्ट्रिंग्स समान लंबाई के होते हैं।
हमारा मूल नंबर N फॉर्म का है AxB
, जहां x
एक एकल अंक है और B
अवरोही क्रमबद्ध है।
हमारे एल्गोरिथ्म द्वारा पाया गया नंबर वह है AyC
, जहां y ∈ B
सबसे छोटा अंक है > x
(इसे जिस तरह x
से चुना गया था, उसके कारण मौजूद होना चाहिए , ऊपर देखें) , और C
आरोही क्रमबद्ध है।
मान लें कि कुछ संख्या (समान अंकों का उपयोग करके) N'
ऐसी है AxB < N' < AyC
। N'
इसके साथ शुरू होना चाहिए A
अन्यथा यह उनके बीच नहीं आ सकता है, इसलिए हम इसे फ़ॉर्म में लिख सकते हैं AzD
। अब हमारी असमानता है AxB < AzD < AyC
, जो xB < zD < yC
सभी तीन अंकों वाले तारों के समान अंकों के बराबर है ।
सही होने के लिए, हमारे पास होना चाहिए x <= z <= y
। के बाद से y
सबसे छोटी अंकों है > x
, z
उन दोनों के बीच न हों, इसलिए या तो कर सकते हैं z = x
या z = y
। कहते हैं z = x
। फिर हमारी असमानता है xB < xD < yC
, जिसका अर्थ है B < D
जहां दोनों B
और D
समान अंक हैं। हालांकि, बी, अवरोही क्रम में क्रमित है तो वहाँ है उन अंकों यह से बड़ा के साथ कोई स्ट्रिंग। इस प्रकार हम नहीं कर सकते B < D
। उसी चरणों का पालन करते हुए, हम देखते हैं कि यदि z = y
, हमारे पास नहीं है D < C
।
इसलिए N'
मौजूद नहीं हो सकता है, जिसका अर्थ है कि हमारा एल्गोरिथ्म अगले सबसे बड़ी संख्या को सही ढंग से ढूंढता है।