The mergeSort.java Program
//
mergeSort.java

//
demonstrates recursive mergesort

//
to run this program: C>java MergeSortApp
import
java.io.
*
;
//
for I/O
class
DArray


...
{

private double[] theArray; // ref to array theArray

private int nElems; // number of data items

//----------------------------------------------------------

public DArray(int max) // constructor


...{

theArray = new double[max]; // create array

nElems = 0;

}

//----------------------------------------------------------

public void insert(double value) // put element into array


...{

theArray[nElems] = value; // insert it

nElems++; // increment size

}

//----------------------------------------------------------

public void display() // displays array contents


...{

for(int j=0; j<nElems; j++) // for each element,

System.out.print(theArray[j] + " "); // display it

System.out.println("");

}

//----------------------------------------------------------

public void mergeSort() // called by main()


...{ // provides workspace

double[] workSpace = new double[nElems];

recMergeSort(workSpace, 0, nElems-1);

}

//----------------------------------------------------------

private void recMergeSort(double[] workSpace, int

lowerBound,

int upperBound)


...{

if(lowerBound == upperBound) // if range is 1,

return; // no use sorting

else


...{ // find midpoint

int mid = (lowerBound+upperBound) / 2;

// sort low half

recMergeSort(workSpace, lowerBound, mid);

// sort high half

recMergeSort(workSpace, mid+1, upperBound);

// merge them

merge(workSpace, lowerBound, mid+1, upperBound);

} // end else

} // end recMergeSort

//----------------------------------------------------------

private void merge(double[] workSpace, int lowPtr,

int highPtr, int upperBound)


...{

int j = 0; // workspace index

int lowerBound = lowPtr;

int mid = highPtr-1;

int n = upperBound-lowerBound+1; // # of items

while(lowPtr <= mid && highPtr <= upperBound)

if( theArray[lowPtr] < theArray[highPtr] )

workSpace[j++] = theArray[lowPtr++];

else

workSpace[j++] = theArray[highPtr++];

while(lowPtr <= mid)

workSpace[j++] = theArray[lowPtr++];

while(highPtr <= upperBound)

workSpace[j++] = theArray[highPtr++];

for(j=0; j<n; j++)

theArray[lowerBound+j] = workSpace[j];

} // end merge()

//----------------------------------------------------------

}
//
end class DArray
class
MergeSortApp


...
{

public static void main(String[] args)


...{

int maxSize = 100; // array size

DArray arr; // reference to array

arr = new DArray(maxSize); // create the array

arr.insert(64); // insert items

arr.insert(21);

arr.insert(33);

arr.insert(70);

arr.insert(12);

arr.insert(85);

arr.insert(44);

arr.insert(3);

arr.insert(99);

arr.insert(0);

arr.insert(108);

arr.insert(36);

arr.display(); // display items

arr.mergeSort(); // mergesort the array

arr.display(); // display items again

} // end main()

}
//
end class MergeSortApp
