package com.anuragkapur.misc; /** * @author: anuragkapur * @since: 24/06/14 */ public class MergeKArrays { /** * merge 2 sorted arrays * * @param a * @param b * @return */ public int[] merge2Arrays(int a[], int b[]) { int runnerA = 0; int runnerB = 0; int result[] = new int[a.length + b.length]; int runnerR = 0; while (runnerR < result.length) { if (runnerA == a.length) { result[runnerR] = b[runnerB]; runnerB ++; } else if(runnerB == b.length) { result[runnerR] = a[runnerA]; runnerA ++; } else { if (a[runnerA] < b[runnerB]) { result[runnerR] = a[runnerA]; runnerA ++; } else { result[runnerR] = b[runnerB]; runnerB ++; } } runnerR ++; } return result; } /** * Assuming K is even, for simplicity * * @param a */ public int[][] mergeKArrays(int a[][]) { int result[][] = new int[a.length/2][]; int runnerInResult = 0; for (int i=0; i<a.length-1; i+=2) { result[runnerInResult++] = merge2Arrays(a[i], a[i+1]); } if (result.length > 1) { result = mergeKArrays(result); } return result; } }