छँटाई सरणियाँ सबसे आम ऑपरेशनों में से एक है जिसे जावा शुरुआती को पता होना चाहिए कि कैसे करना है। हालाँकि सरणियाँ हमेशा डेटा को व्यवस्थित करने का सबसे सुविधाजनक तरीका नहीं होती हैं और यह ज्यादातर छोटी संख्याओं पर लागू होता है, सरणी छँटाई के पीछे की अवधारणा में जटिल सॉफ़्टवेयर और डेटा विज्ञान में बहुत सारे अनुप्रयोग हैं। इस पोस्ट में, हम विस्तार से देखेंगे कि इंसर्शन सॉर्ट क्या है। इस अवधारणा को समझने में आपकी मदद करने के लिए हमने कुछ उदाहरण और अभ्यास समस्याएं शामिल की हैं।
सम्मिलन क्रम क्या है?
मूल रूप से, सम्मिलन छँटाई एक एल्गोरिथ्म है जिसका उपयोग डेवलपर्स छोटी संख्याओं के तार को व्यवस्थित करने के लिए करते हैं। यह सभी मानों को दो स्टैक में विभाजित करता है - एक सॉर्ट किया गया और एक अनसोर्टेड। एक-एक करके, "अनसोर्टेड" स्टैक में संख्याएँ निकाली जाती हैं और सही क्रम में रखी जाती हैं। आइए सम्मिलन प्रकार के इनपुट और आउटपुट पर करीब से नज़र डालें:- इनपुट: अवर्गीकृत सांख्यिक तत्वों के साथ एक सरणी A: A[0,1, n, n-2...]।
- आउटपुट: एक सरणी जिसमें समान संख्याएँ होती हैं लेकिन पूरी तरह से क्रमबद्ध होती हैं। इसे आमतौर पर B: B[0]B[1]...B[n-1] कहा जाता है।
- संख्यात्मक छँटाई (बढ़ते क्रम): [1, 2, 3, 4, 5]
- संख्यात्मक छँटाई (घटता क्रम): [5, 4, 3, 2, 1]
- वर्णानुक्रमिक छँटाई: [ए, बी, सी, डी]
सम्मिलन छँटाई के सिद्धांत को समझना
इंसर्शन सॉर्ट के पीछे के कोड की खोज करने से पहले, आइए गैर-तकनीकी भाषा का उपयोग करके एल्गोरिथम को तोड़ दें। क्योंकि हम आरोही क्रम में छँटाई के लिए कोड दिखा रहे हैं, यह इस पोस्ट में चरण दर चरण एल्गोरिथ्म की व्याख्या करने के लिए समझ में आता है। चरण 1.arr[1]
बीच में और arr[n]
कहाँ पर पुनरावृत्ति n
एक संख्यात्मक मान है जो आमतौर पर 10 से कम होता है। चरण 2. विधि का key
उपयोग करके अनुक्रम में पिछली संख्या के लिए आपके द्वारा चुने गए तत्व (जिसे ) के रूप में जाना जाता है, की तुलना करें। चरण 3। यदि सभी तत्व उनके उत्तराधिकारी से छोटे हैं, तो तुलना को तब तक दोहराएं जब तक आपको बड़ा मूल्य न मिल जाए। चरण 4. ऑर्डर किए गए अनुक्रम को बनाने के लिए बड़े मान को छोटे वाले से एक स्थान पर स्वैप करें। sort()
चरण 5। इस प्रक्रिया को तब तक दोहराएं जब तक कि आपको वर्णों की एक क्रमबद्ध स्ट्रिंग न मिल जाए
आदिम सरणियों को छाँटना
चूंकि एल्गोरिद्म सबसे सरल जावा संचालनों में से एक है, यहां तक कि पूर्ण शुरुआती लोगों को इसे लागू करने में ज्यादा परेशानी नहीं होनी चाहिए। यहां किसी सरणी को क्रमबद्ध करने के लिए चरण-दर-चरण मार्गदर्शिका दी गई है1. छँटाई के लिए एक सरणी घोषित करें
आरंभ करने के लिए, आइए मूल्यों की एक स्ट्रिंग बनाएं जिसे हम बाद में जावा का उपयोग करके प्रदर्शित करेंगे। सम्मिलन प्रकार का उपयोग करने के लिए, आपको एक सरणी बनाने की आवश्यकता है। उसके लिए, प्रयोग करेंint[]
int[] arrayA = {10, 14, 20, 30};
2. एल्गोरिथ्म को लागू करने के लिए Sort_arr का उपयोग करें
सम्मिलन प्रकार को लागू करने के लिए Sort_arr विधि सबसे सामान्य तरीकों में से एक है। व्यवहार में, ऐसा दिखता है:for(int i=0; i< sort_arr.length; ++i){
int j = i;
3. एक लूप और एक पुनरावर्तक बनाएँ
सम्मिलन छँटाई एल्गोरिथ्म में एक लूप का उपयोग करके, डेवलपर्स को प्रत्येक तत्व के लिए तर्क को दोहराना नहीं पड़ता है। हालांकि लूप बनाना जटिल लगता है, यह काफी सरल है - यहाँ एक उदाहरण दिया गया है:for(int i=0; i< sort_arr.length; ++i){
अब जब आपके पास कार्यशील लूप है, तो यह एक पुनरावर्तक बनाने का समय है जो वांछित क्रम में सभी तत्वों को सॉर्ट करेगा। अब से, हम पुनरावर्तक को " j
" के रूप में संदर्भित करेंगे।
int j = i;
4. "जबकि लूप" बनाना
जब सम्मिलन क्रम की बात आती है, तो एक नए, क्रमबद्ध सरणी के लिए "जबकि" लूप आवश्यक होता है। आरोही-क्रम सम्मिलन प्रकार के लिए इसे सेट अप करने के लिए, एक डेवलपर को दो शर्तों का पालन करने की आवश्यकता होती है:- J को असाइन किया गया मान 0 से अधिक होना चाहिए
- निर्दिष्ट मान इंडेक्स
j-1
से अधिक होना चाहिएj
j
इंडेक्स के बराबर होगा।
5. सरणी छँटाई
आपके द्वारा while लूप सेट करने के बाद, andj
मानों j-1
की अदला-बदली तब तक की जाएगी जब तक कि while लूप में एक या दोनों स्थितियाँ विफल नहीं हो जातीं। इसी तरह, लूप के लिए प्रत्येक मान के लिए छँटाई दोहराई जाएगी जब तक कि फॉर-लूप की स्थिति भी विफल नहीं हो जाती। यहां बताया गया है कि इंसर्शन सॉर्ट की प्रक्रिया व्यवहार में कैसे काम करती है:
int key = sort_arr[j];
sort_arr[j] = sort_arr[j-1];
sort_arr[j-1] = key;
j = j-1;
एक ArrayList को सॉर्ट करना
यद्यपि सम्मिलन छँटाई के पीछे के गणित को समझना महत्वपूर्ण है, जब यह वास्तविक जीवन के सॉफ़्टवेयर विकास की बात आती है, तो आप आदिम सरणियों में अनुक्रमों की तुलना में बहुत अधिक ArrayLists को क्रमबद्ध करेंगे। यहाँ एक ArrayList को सॉर्ट करने के लिए चरण-दर-चरण मार्गदर्शिका दी गई है:Element
संग्रह से संबंधित वस्तुओं के लिए एक नई कक्षा बनाएँ ।public class Element { private int id; public Element(int id) { this.id = id; }
- एक संग्रह के भीतर, एक विधि है
compareTo()
- हम इसका उपयोग दो तत्वों की आईडी की तुलना करने के लिए करेंगे।public int compareTo(Element element) { int res = 0; if (this.id < element.getId()) { res = -1; } if (this.id > element.getId()) { res = 1; } return res; } }
- एल्गोरिदम लागू करें और वस्तुओं की
ArrayList
तुलना करने के बजाय उन्हें सॉर्ट करने के लिए कुछ लूप बनाएं।public static void insertionSortArrayList(List<element> list) { for (int j = 1; j < list.size(); j++) { Element current = list.get(j); int i = j-1; while ((i > -1) && ((list.get(i).compareTo(current)) == 1)) { list.set(i+1, list.get(i)); i--; } list.set(i+1, current); } }
- जैसा कि नीचे दिखाया गया है, आप और भी तत्व जोड़ सकते हैं
ArrayList
:List<element> list = new ArrayList<>(); // Create elements w/ IDs 0-24 for (int i = 0; i < 25; i++) { list.add(new Element(i)); } // To use insertion sort, shuffle the values Collections.shuffle(list);
- अब छँटाई का समय आ गया है:
// This helps print values before sorting list.forEach(e -> System.out.print(e.getId() + ", ")); // Sort the list insertionSortArrayList(list); System.out.println(); // Display a sorted array list.forEach(e -> System.out.print(e.getId() + ", "));
- अब यह सुनिश्चित करने के लिए कि हमने कोई गलती नहीं की है, इनपुट और आउटपुट की तुलना करते हैं। यहाँ हम एक उदाहरण के रूप में उपयोग की जाने वाली स्ट्रिंग की तुलना कर रहे हैं।
4, 2, 6, 7, 0, 5, 9, 1, 8, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,