<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">public class MergeSort {

    public static void main(String[] args) {
	int length=5,min=0,max=9;
	Comparable[] a1 = createArray(min,max,length);
	printArray(a1);	
	Comparable[] a2 = mergeSort(a1,0,length-1);
	printArray(a2);
    }
    
    public static void printArray(Comparable[] a) {
        for (int i = 0; i &lt; a.length; i++) {
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }
    
    public static Comparable[] createArray(int min, int max, int length) {
        Comparable[] a = new Comparable[length];
        for (int i = 0; i &lt; a.length; i++)
            a[i] = MyMath.randInteger(min,max);
	return a;
    }

    public static Comparable[] mergeSort(Comparable[] x, int low, int high) {

	// at least three elements:
	if (low &lt; high - 1) {
	    int mid = (low + high)/2;
	    Comparable[] x1 = mergeSort(x, low, mid);
	    Comparable[] x2 = mergeSort(x, mid+1, high);
	    return merge(x1,x2);
	}

	// 0,1,or 2 elements:
	else {
	    int length = high - low +1;
	    Comparable[] r = new Comparable[length];
	    if (length == 1) r[0] = x[low];
	    if (length == 2)
		if(x[low].compareTo(x[high]) &lt; 0) {
		    r[0] = x[low];
		    r[1] = x[high];
		} else {
		    r[0] = x[high];
		    r[1] = x[low];
		}
	    return r;
	}
    }

    public static Comparable[] merge(Comparable[] a1, Comparable[] a2) {
	Comparable[] m = new Comparable[a1.length + a2.length];
	int p1 = 0;
	int p2 = 0;
	int pm = 0;

	while ((p1 &lt; a1.length) &amp;&amp; (p2 &lt; a2.length))
	    if (a1[p1].compareTo(a2[p2]) &lt;= 0) m[pm++] = a1[p1++];
	    else m[pm++] = a2[p2++];

	// either a1 or a2 will empty at this point:
	for(; p1 &lt; a1.length; p1++) // merge any leftovers from a1
	    m[pm++] = a1[p1];
	for(; p2 &lt; a2.length; p2++) // merge any leftovers from a2
	    m[pm++] = a2[p2];
	return m;
    }    
}

class MyMath {
    // Return a random int between low and high, inclusive:
    public static int randInt(int low, int high) {
        return (int) (Math.random()*(high-low+1)) + (int) low; }
    public static Integer randInteger(int low, int high) {
        return new Integer(randInt(low,high)); }
}
</pre></body></html>