"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