Note : Below is not a good example, just a solution that I came up with there could be n number of solutions that are better
Tips
- Write the code in array list first so that you need not worry about ArrayIndexOutof bond exception rather than handling it
Example with ArrayList :
package com.demo2; import java.util.ArrayList; import java.util.List; public class Example1 { public static void main(String[] args) { int[] a = { 1, 2, 5, 7 }; int[] b = { 3, 6, 9, 11 }; int x = 0, y = 0; List<Integer> c = new ArrayList<>(); int tempLength; int tempIterated = 0; while (x < a.length) { tempLength = c.size(); y = tempIterated; while (y < b.length) { if (a[x] < b[y]) { c.add(a[x]); tempIterated = y; break; } else { c.add(b[y]); } y++; } x++; if (a.length == x && c.size() != a.length + b.length) { int location = c.size(); int bLocation = a.length + b.length - c.size(); while (location < b.length + a.length) { c.add(b[bLocation]); location++; bLocation++; } } } c.forEach(System.out::println); } }
Example with Array :
package com.demo2; import java.util.Arrays; public class Example2{ public static void main(String[] args) { int[] a = { 1, 2, 5, 7 }; int[] b = { 3, 6, 9, 11 }; Integer x = 0, y = 0; int[] c = new int[a.length+b.length]; int tempIterated = 0; int cCounter=0; while (x < a.length) { y = tempIterated; while (y < b.length) { if (a[x] < b[y]) { c[cCounter++]=a[x]; tempIterated = y; break; } else { c[cCounter++] = b[y]; } y++; } x++; int nonNullElements = (int)Arrays.stream(c).filter(intX->intX!=0).count(); if (a.length == x && nonNullElements != a.length + b.length) { int location = nonNullElements; int bLocation = a.length + b.length - nonNullElements; while (location < b.length + a.length) { c[location]=b[bLocation]; location++; bLocation++; } } } Arrays.stream(c).forEach(System.out::println); } }
Note if can even optimize the above code if you take the outer array as the array which as the highest value at the last