"Add a merge() method so that you can merge two ordered source arrays into an ordered destination array. Write code in main() that inserts some random numbers into the two source arrays, invokes merge(), and displays the contents of the resulting destination array."
My code only displays 7 arrays (merged). Even though i input 5 items in the first array and 3 items in the second. How do i correct this? Here's my code:
and
My code only displays 7 arrays (merged). Even though i input 5 items in the first array and 3 items in the second. How do i correct this? Here's my code:
class OrdArray { private long[] a; // ref to array a private int nElems; // number of data items //----------------------------------------------------------- public OrdArray(int max) // constructor { a = new long[max]; // create array nElems = 0; } //----------------------------------------------------------- public int size() { return nElems; } //----------------------------------------------------------- public int find(long searchKey) { int lowerBound = 0; int upperBound = nElems-1; int curIn; while(true) { curIn = (lowerBound + upperBound ) / 2; if(a[curIn]==searchKey) return curIn; // found it else if(lowerBound > upperBound) return nElems; // cant find it else // divide range { if(a[curIn] < searchKey) lowerBound = curIn + 1; // its in upper half else upperBound = curIn - 1; // its in lower half } // end else divide range } // end while } // end find() //----------------------------------------------------------- public void insert(long value) // put element into array { int j; for(j=0; j<nElems; j++) // find where it goes if(a[j] > value) // (linear search) break; for(int k=nElems; k>j; k--) // move bigger ones up a[k] = a[k-1]; a[j] = value; // insert it nElems++; // increment size } // end insert() //----------------------------------------------------------- public boolean delete(long value) { int j = find(value); if(j==nElems) // cant find it return false; else // found it { for(int k=j; k<nElems; k++) // move bigger ones down a[k] = a[k+1]; nElems--; // decrement size return true; } } // end delete() //----------------------------------------------------------- public void display() // displays array contents { for(int j=0; j<nElems; j++) // for each element, System.out.print(a[j] + " "); // display it System.out.println(""); } //----------------------------------------------------------- public static void merge( int[] first, int firstsize, int[] second, int secsize, int[] third ) { int j=0, k=0, l=0; while(j < firstsize && k < secsize) // neither array empty if( first[j] < second[k] ) third[l++] = first[j++]; else third[l++] = second[k++]; while(j < firstsize) // arrayB is empty, third[l++] = first[j++]; // but first isnt while(k < secsize) // first is empty, third[l++] = second[k++]; // but second isnt System.out.println("\nNew Array (Merged)"); } // end merge() //----------------------------------------------------------- void display2(int[] a, int size) { for(int j=0; j<nElems; j++) // for each element, System.out.print(a[j] + " "); // display it System.out.println(""); } //----------------------------------------------------------- } // end class OrdArray
and
class OrderedApp { public static void main(String[] args) { int maxSize = 100; // array size OrdArray arr; // reference to array arr = new OrdArray(maxSize); // create the array arr.insert(77); // insert 10 arr.insert(99); arr.insert(44); arr.insert(55); arr.insert(22); arr.insert(88); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); System.out.println("Original Array"); int searchKey = 55; // search for item if( arr.find(searchKey) != arr.size() ) System.out.println("Found " + searchKey); else System.out.println("Cant find " + searchKey); arr.display(); // display items arr.delete(00); // delete 3 items arr.delete(55); arr.delete(99); arr.display(); // display items again int[] arrayA = {77, 44, 22, 88, 98}; int[] arrayB = {7, 14, 39}; int[] arrayC = new int[arrayA.length + arrayB.length]; arr.merge(arrayA, 5, arrayB, 3, arrayC); arr.display2(arrayC, 8); } // end main() } // end class OrderedApp