सॉर्ट करना 2-आयामी सरणी के लिए कोई मतलब नहीं है ... या करता है?
आपका कार्य एक इनपुट ग्रिड लेना है और एक बबल-सॉर्ट-जैसे एल्गोरिथ्म इसे तब तक लागू करना है जब तक कि ग्रिड के सभी मान बाएं से दाएं और हर पंक्ति और स्तंभ के साथ ऊपर से नीचे तक घटते न हों।
यह एल्गोरिथ्म इस प्रकार काम करता है:
- प्रत्येक पास पंक्ति से पंक्ति में, ऊपर से नीचे, प्रत्येक सेल को उसके दाहिने और नीचे के पड़ोसियों के साथ तुलना / स्वैप करता है।
- यदि सेल अपने दाहिने और नीचे के पड़ोसियों में से केवल एक से अधिक है, तो उस के साथ स्वैप करें जो कि इससे अधिक है
- यदि सेल अपने दाहिने और नीचे दोनों पड़ोसी से अधिक है, तो छोटे पड़ोसी के साथ स्वैप करें
- यदि सेल अपने दाहिने और नीचे दोनों पड़ोसी से अधिक है, जो समान मूल्य हैं, तो नीचे पड़ोसी के साथ स्वैप करें।
- यदि सेल अपने दाईं और नीचे पड़ोसियों से अधिक नहीं है, तो कुछ भी न करें
- इसे तब तक जारी रखें जब तक पूरे पास में कोई स्वैप न हो जाए। यह तब होगा जब हर पंक्ति और स्तंभ क्रम में हों, बाएँ से दाएँ और ऊपर से नीचे।
उदाहरण
4 2 1
3 3 5
7 2 1
पास की पहली पंक्ति 4 और 2 को स्वैप करेगी, फिर 1 के साथ 4।
2 1 4
3 3 5
7 2 1
जब हम मध्य 3 प्राप्त करते हैं, तो इसे नीचे 2 के साथ स्वैप किया जाएगा
2 1 4
3 2 5
7 3 1
फिर 5 नीचे 1 के साथ स्वैप हो जाता है
2 1 4
3 2 1
7 3 5
पहली पास की अंतिम पंक्ति दाईं ओर 7 सभी तरफ जाती है
2 1 4
3 2 1
3 5 7
फिर हम फिर से शीर्ष पंक्ति पर वापस जाते हैं
1 2 1
3 2 4
3 5 7
और पंक्ति द्वारा पंक्ति जारी रखें ...
1 2 1
2 3 4
3 5 7
... जब तक ग्रिड "क्रमबद्ध" है
1 1 2
2 3 4
3 5 7
एक और उदाहरण
3 1 1
1 1 1
1 8 9
हो जाता है
1 1 1
1 1 1
3 8 9
बजाय
1 1 1
1 1 3
1 8 9
क्योंकि एक सेल के दाएं और नीचे दोनों पड़ोसी समान होने पर नीचे की ओर स्वैप प्राथमिकता लेते हैं।
एक चरण-दर-चरण संदर्भ कार्यान्वयन यहां पाया जा सकता है ।
परीक्षण के मामलों
5 3 2 6 7 3 1 0
3 2 1 9 9 8 3 0
3 2 2 8 9 8 7 6
हो जाता है
0 0 1 1 2 2 3 6
2 2 3 3 6 7 8 8
3 3 5 7 8 9 9 9
2 1 2 7 8 2 1 0
2 2 2 2 3 2 1 0
1 2 3 4 5 4 3 2
9 8 7 6 5 4 3 6
6 5 4 3 2 2 1 0
हो जाता है
0 0 0 1 1 1 2 2
1 1 2 2 2 2 2 2
2 2 2 2 3 3 3 3
3 4 4 4 4 5 6 6
5 5 6 7 7 8 8 9
नियम
- आप किसी भी सुविधाजनक प्रारूप में इनपुट ग्रिड ले सकते हैं
- आप मान सकते हैं कि ग्रिड मान अहस्ताक्षरित 16-बिट श्रेणी (0-65535) में सभी गैर-नकारात्मक पूर्णांक हैं।
- आप मान सकते हैं कि ग्रिड एक सही आयत है और दांतेदार सरणी नहीं है। ग्रिड कम से कम 2x2 पर होगा।
- यदि आप छंटाई का एक और एल्गोरिथ्म का उपयोग करते हैं, तो आपको एक सबूत देना होगा कि यह हमेशा उसी परिणामी क्रम का उत्पादन करेगा जैसे कि 2 डी बबल सॉर्टिंग का विशेष ब्रांड, इनपुट चाहे जो भी हो। मुझे उम्मीद है कि यह एक गैर-तुच्छ प्रमाण है, इसलिए आप वर्णित एल्गोरिथ्म का उपयोग करके संभवतः बेहतर होंगे।
हैप्पी गोल्फिंग!