हमें 'n' संख्या में सरणियाँ दी गई हैं, मान लें कि हम तीन सरणियाँ लेते हैं यानी arr1[], arr2[] और arr3[] पूर्णांक प्रकार की। कार्य सभी दी गई पूर्णांक सरणियों को इस तरह मर्ज करना है कि परिणामी सरणी केवल रनटाइम में क्रमबद्ध हो।
आइए उदाहरण से समझते हैं
इनपुट -
Int
a[]={21,22,23,24};
int b[ ] ={28,31,35}
आउटपुट - int resultant[ ]={21,22,23,24,28,31,35}.
व्याख्या - सरणी तत्वों की तुलना की जाती है इससे पहले कि वे जोड़े जाएं और परिणामी सरणी में उनकी उपयुक्त स्थिति के अनुसार जोड़े जाते हैं।
इनपुट -
int
a[]={1,3,5,7,9,11,13};
int b[ ] ={14,16,18}
int c[ ] ={19,20,21,22}
आउटपुट - int resultant[ ]={1,3,5,7,9,11,13,14,16,18,19,20,21,22}.
व्याख्या - सरणी तत्वों की तुलना की जाती है इससे पहले कि वे जोड़े जाएं और परिणामी सरणी में उनकी उपयुक्त स्थिति के अनुसार जोड़े जाते हैं।
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण इस प्रकार है -
तीन पूर्णांक सरणी इनपुट करें मान लें, arr1[], arr2[] और arr3[] और एक परिणामी सरणी result[] और इसे mergeSortedArray(new int[][] { arr1, arr2, arr3 }) के कॉल के रूप में सेट करें
विधि mergeSortedArray(new int[][] { arr1, arr2, arr3 }) के अंदर
प्रायोरिटी क्यू प्रकार का एक वेरिएबल क्यू के रूप में बनाएं और एक वेरिएबल टोटल के रूप में बनाएं और इसे 0 पर सेट करें।
i से 0 तक सरणी की लंबाई तक FOR लूप शुरू करें और सरणी के बकेट से तत्व को क्यू के रूप में घोषित वेरिएबल में जोड़ें और टोटल को टोटल + arr[i].length पर सेट करें।
m को 0 पर सेट करें और result[] पूर्णांक सरणी घोषित करें।
while queue.isEmpty() = false शुरू करें फिर ArrayBucket ac को queue.poll() के रूप में सेट करें, result[m++] को ac.arr[ac.index] के रूप में सेट करें और जांचें IF ac.index ac.arr.length - 1 से कम है तो queue.add(new ArrayBucket(ac.arr, ac.index + 1)) सेट करें
result वापस करें
उदाहरण
import java.util.Arrays; import java.util.PriorityQueue; class ArrayBucket implements Comparable<ArrayBucket>{ int[] arr; int index; public ArrayBucket(int[] arr, int index){ this.arr = arr; this.index = index; } @Override public int compareTo(ArrayBucket o){ return this.arr[this.index] - o.arr[o.index]; } } public class testClass{ public static int[] mergeSortedArray(int[][] arr){ PriorityQueue<ArrayBucket> queue = new PriorityQueue<ArrayBucket>(); int total = 0; for (int i = 0; i < arr.length; i++){ queue.add(new ArrayBucket(arr[i], 0)); total = total + arr[i].length; } int m = 0; int result[] = new int[total]; while (!queue.isEmpty()){ ArrayBucket ac = queue.poll(); result[m++] = ac.arr[ac.index]; if (ac.index < ac.arr.length - 1){ queue.add(new ArrayBucket(ac.arr, ac.index + 1)); } } return result; } public static void main(String[] args){ int[] arr1 = { 1, 3, 5, 7 }; int[] arr2 = { 2, 4, 6, 8 }; int[] arr3 = { 0, 9, 10, 11 }; int[] result = mergeSortedArray(new int[][] { arr1, arr2, arr3 }); System.out.println("The final merged sorted array is :- "+Arrays.toString(result)); } }आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा
The final merged sorted array is :-[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]