मर्ज सॉर्ट एक सॉर्टिंग एल्गोरिथ्म है जो किसी दिए गए सूची को आधे में विभाजित करके, दोनों छोटी सूचियों को पुन: क्रमबद्ध करता है, और उन्हें एक सॉर्ट की गई सूची में वापस विलय कर देता है। पुनरावृत्ति का आधार मामला एक सिंगलटन सूची में आ रहा है, जिसे आगे विभाजित नहीं किया जा सकता है लेकिन प्रति परिभाषा के अनुसार पहले से ही हल किया गया है।
सूची पर एल्गोरिथ्म का निष्पादन [1,7,6,3,3,2,5]
निम्नलिखित तरीके से देखा जा सकता है:
[1,7,6,3,3,2,5]
/ \ split
[1,7,6,3] [3,2,5]
/ \ / \ split
[1,7] [6,3] [3,2] [5]
/ \ / \ / \ | split
[1] [7] [6] [3] [3] [2] [5]
\ / \ / \ / | merge
[1,7] [3,6] [2,3] [5]
\ / \ / merge
[1,3,6,7] [2,3,5]
\ / merge
[1,2,3,3,5,6,7]
काम
एक प्रोग्राम या फ़ंक्शन लिखें जो किसी भी उचित तरीके से पूर्णांकों की सूची को इनपुट के रूप में लेता है और मर्ज सॉर्ट एल्गोरिथ्म द्वारा सॉर्ट किए जाने के दौरान इस सूची के विभिन्न विभाजन की कल्पना करता है। इसका मतलब है कि आपको ऊपर दिए गए ग्राफ़ की तरह आउटपुट नहीं करना है, लेकिन बस सूचियाँ ठीक हैं:
[1,7,6,3,3,2,5]
[1,7,6,3][3,2,5]
[1,7][6,3][3,2][5]
[1][7][6][3][3][2][5]
[1,7][3,6][2,3][5]
[1,3,6,7][2,3,5]
[1,2,3,3,5,6,7]
इसके अलावा, कोई भी उचित सूची संकेतन ठीक है, इसलिए निम्नलिखित भी एक मान्य आउटपुट होगा:
1 7 6 3 3 2 5
1 7 6 3|3 2 5
1 7|6 3|3 2|5
1|7|6|3|3|2|5
1 7|3 6|2 3|5
1 3 6 7|2 3 5
1 2 3 3 5 6 7
अंत में, दो छोटी सूचियों में एक सूची को विभाजित करने का तरीका आपके ऊपर है जब तक दोनों परिणामी सूचियों की लंबाई एक-एक करके अलग-अलग होती है। इसका मतलब यह है कि और [3,2,4,3,7]
में विभाजित करने के बजाय , आप भी और विषम अनुक्रमित ( और ) पर तत्वों को ले कर विभाजित कर सकते हैं या हर बार विभाजन को यादृच्छिक कर सकते हैं।[3,2,4]
[3,7]
[3,4,7]
[2,3]
यह कोड-गोल्फ है , इसलिए किसी भी भाषा में सबसे छोटा कोड बाइट्स में मापा जाता है।
परीक्षण के मामलों
जैसा कि ऊपर उल्लेख किया गया है, वास्तविक प्रारूप और सूची को आधे में विभाजित करने का तरीका आपके ऊपर है।
[10,2]
[10][2]
[2,10]
[4,17,1,32]
[4,17][1,32]
[4][17][1][32]
[4,17][1,32]
[1,4,17,32]
[6,5,4,3,2,1]
[6,5,4][3,2,1]
[6,5][4][3,2][1]
[6][5][4][3][2][1]
[5,6][4][2,3][1] <- Important: This step cannot be [5,6][3,4][1,2], because 3 and 4 are on different branches in the the tree
[4,5,6][1,2,3]
[1,2,3,4,5,6]
[[1,2],[3],[4,5],[6]]
मंच वास्तव में सही समाधान है, क्योंकि मर्ज की तरह पुनरावर्ती कार्य कर रहा है। यही कारण है कि अगर हम साथ शुरू है [1,2,3,4,5,6]
और यह भागों में विभाजित [1,2,3]
और [4,5,6]
, तो उन सूचियों को स्वतंत्र रूप से कार्रवाई की जाती है, जब तक वे अंतिम चरण में विलय कर रहे हैं।
[3]
और [2,1]
फिर, वे अलग-अलग शाखाओं पर होते हैं, तो हम विलय नहीं कर सकते हैं [3]
और [2]
बाद [2,1]
में विभाजित होते हैं [2]
और [1]
।