मुझे संख्याओं की सूची को क्रमबद्ध करना है, लेकिन मैं सुपर आलसी हूं। यह वास्तव में कठिन है कि सभी संख्याओं को कैसे स्वैप किया जाए, जब तक कि वे सभी बढ़ते हुए क्रम में न हों, इसलिए मैं अपने स्वयं के एल्गोरिथ्म के साथ आया हूं जो गारंटी देगा कि नई सूची क्रमबद्ध है। यहां देखिए यह कैसे काम करता है:
आकार N की सूची के लिए , हमें N-1 पुनरावृत्तियों की आवश्यकता होगी । प्रत्येक पुनरावृत्ति पर,
जांचें कि N'th नंबर N + 1'th नंबर से छोटा है या नहीं । यदि यह है, तो ये दो नंबर पहले से ही क्रमबद्ध हैं, और हम इस पुनरावृत्ति को छोड़ सकते हैं।
यदि वे नहीं हैं, तो आपको पहले एन संख्याओं को लगातार घटाना होगा जब तक कि ये दो संख्याएं क्रम में न हों।
चलिए एक ठोस उदाहरण लेते हैं। मान लीजिए कि इनपुट था
10 5 7 6 1
पहली पुनरावृत्ति पर, हम 10 और 5 की तुलना करेंगे। 10 5 से बड़ा है, इसलिए हम इसे छोटा होने तक घटाते हैं:
4 5 7 6 1
अब हम 5 और 7. 5 की तुलना 7 से छोटा करते हैं, इसलिए हमें इस पुनरावृत्ति पर कुछ भी करने की आवश्यकता नहीं है। तो हम अगले पर जाते हैं और 7 और 6 की तुलना करते हैं। 7 6 से बड़ा है, इसलिए हम पहले तीन नंबरों को घटाते हैं जब तक कि यह 6 से छोटा न हो, और हमें यह मिलता है:
2 3 5 6 1
अब हम 6 और 1 की तुलना करते हैं। फिर से, 6 1 से बड़ा है, इसलिए हम पहले चार नंबरों को घटाते हैं जब तक कि यह 1 से छोटा न हो, और हम यह करते हैं:
-4 -3 -1 0 1
और हम कर रहे हैं! अब हमारी सूची एकदम सही क्रम में है। और, चीजों को और बेहतर बनाने के लिए, हमें केवल N-1 बार सूची के माध्यम से पुनरावृत्त करना पड़ा , इसलिए यह एल्गोरिथ्म सॉर्ट करता है O (N-1) समय में सूची, जो मुझे पूरा यकीन है कि सबसे तेज एल्गोरिथ्म है ।²
आज के लिए आपकी चुनौती इस लज़ीज़ सॉर्ट को लागू करना है। आपके प्रोग्राम या फ़ंक्शन को जो भी मानक प्रारूप आपको पसंद है, उसमें एक पूर्णांक दिया जाएगा, और आपको यह आलसी क्रमबद्ध करना होगा और नई "सॉर्ट की गई" सूची को वापस करना होगा । सरणी कभी खाली नहीं होगी या इसमें गैर-पूर्णांक नहीं होंगे।
यहाँ कुछ उदाहरण हैं:
Input: 10 5 7 6 1
Output: -4 -3 -1 0 1
Input: 3 2 1
Output: -1 0 1
Input: 1 2 3
Output: 1 2 3
Input: 19
Output: 19
Input: 1 1 1 1 1 1 1 1 1
Output: -7 -6 -5 -4 -3 -2 -1 0 1
Input: 5 7 11 6 16 2 9 16 6 16
Output: -27 -25 -21 -20 -10 -9 -2 5 6 16
Input: -8 17 9 7
Output: -20 5 6 7
हमेशा की तरह, यह कोड-गोल्फ है , इसलिए सबसे छोटा प्रोग्राम लिखें जो आप कर सकते हैं!
What इसका मतलब यह नहीं है कि यह कैसा लगता है इसका मतलब है, लेकिन यह तकनीकी रूप से सच है
Kid मैं पूरी तरह से मजाक कर रहा हूं, कृपया मुझसे नफरत मत करो
<sarcasm>
यह छँटाई एल्गोरिथ्म वास्तव में अभी भी O(N^2)
समय जटिलता में देखता है क्योंकि आपको सूची में सभी पहले से एक्सेस किए गए आइटमों से गुजरना पड़ता है ताकि उन्हें कम किया जा सके। मैं इसके बजाय पीछे की ओर सूची से गुजरने की सलाह देता हूं और आवश्यकतानुसार केवल एक नंबर प्रति कदम घटाता हूं । यह आपको सच्ची O(N)
जटिलता देगा! </sarcasm>
O(n^2)
मेमोरी एक्सेस के मामले में, लेकिन O(n)
तुलना के लिए नहीं है ?
O(N^2)
।