Created
November 16, 2016 18:40
-
-
Save bzdgn/55d675e130b8768a60b599c1d622f414 to your computer and use it in GitHub Desktop.
Demonstration of Merging K-Sorted Array With Unique Elements
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.levo.odev; | |
/* | |
* En buyuk Fenerbahce! | |
*/ | |
public class MergeDemo { | |
public static void main(String[] args) { | |
int[] arr1 = { 1, 2, 6, 7, 18, 19 }; | |
int[] arr2 = { 3, 4, 5, 8, 9 }; | |
int[] arr3 = { 10, 11, 12 }; | |
int[] arr4 = { 13, 14, 15, 20}; | |
int[] arr5 = { 16, 17}; | |
int[][] arrays = { arr1, arr2, arr3, arr4, arr5 }; | |
handleAnswer(arrays); | |
} | |
public static void handleAnswer(int[][] arrays) { | |
System.out.println("List of arrays to be merged;"); | |
System.out.println("****************************"); | |
for(int i = 0; i < arrays.length; i++) { | |
System.out.printf("Array [%d]: ", i); | |
printArray(arrays[i]); | |
} | |
System.out.println(""); | |
System.out.println("Merged array;"); | |
System.out.println("*************"); | |
printArray(merge(arrays)); | |
} | |
public static void printArray(int[] array) { | |
for(int i = 0; i < array.length; i++) | |
System.out.printf("%d ", array[i]); | |
System.out.print('\n'); | |
} | |
/* | |
* Merges k sorted arrays with arbitrary lengths | |
* Calls overloaded merge method with two parameters | |
*/ | |
private static int[] merge(int[][] arrays) { | |
int[] mergeArray = new int[arrays[0].length]; | |
System.arraycopy(arrays[0], 0, mergeArray, 0, arrays[0].length); | |
for(int i = 1; i < arrays.length; i++) { | |
mergeArray = merge(mergeArray, arrays[i]); | |
} | |
return mergeArray; | |
} | |
/* | |
* Merges two sorted arrays assuming | |
* they have unique elements | |
*/ | |
private static int[] merge(int[] arr1, int[] arr2) { | |
int left = 0; | |
int right = 0; | |
int[] mergeArr = new int[ arr1.length + arr2.length ]; | |
int index = 0; | |
while(index != mergeArr.length){ | |
if(left == arr1.length) { | |
while(right != arr2.length) { | |
mergeArr[index++] = arr2[right++]; | |
} | |
} else if(right == arr2.length) { | |
while(left != arr1.length) { | |
mergeArr[index++] = arr1[left++]; | |
} | |
} else { | |
if(arr1[left] < arr2[right]) { | |
mergeArr[index++] = arr1[left++]; | |
} else { | |
mergeArr[index++] = arr2[right++]; | |
} | |
} | |
} | |
return mergeArr; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Output;