package jds.sort;
import java.util.Enumeration;
import jds.SortAlgorithm;
import jds.Indexed;
import java.util.Comparator;
import jds.collection.Vector;
/**
* MergeSort - implementation of the merge sort algorithm;
* for use with book
* Classic Data Structures
* in Java
* by Timothy A Budd,
* published by Addison-Wesley, 2001.
*
* @author Timothy A. Budd
* @version 1.1 September 1999
* @see jds.Indexed
*/
public class MergeSort implements SortAlgorithm {
/**
* initialize the Merge Sort algorithm
*
* @param t the Comparator used to place values in sequence
*/
public MergeSort (Comparator t) { test = t; }
private Comparator test;
private Indexed data;
private Vector stk = new Vector();
/**
* rearrange collection into asending order
*
* @param data the values to be ordered
*/
public void sort (Indexed v) {
data = v;
stk.ensureCapacity(v.size());
sort(0, v.size());
}
private void sort (int low, int high) {
if (low+1 >= high) return;
int mid = (low + high) / 2;
sort(low, mid); sort(mid, high);
merge(low, mid, high);
}
private void merge (int low, int mid, int high) {
stk.setSize(0);
int i = low;
int j = mid;
while ((i < mid) || (j < high))
if (i < mid)
if ((j < high) &&
(test.compare(data.elementAt(j),
data.elementAt(i)) < 0))
stk.addLast(data.elementAt(j++));
else
stk.addLast(data.elementAt(i++));
else
stk.addLast(data.elementAt(j++));
j = stk.size();
for (i = 0; i < j; i++)
data.setElementAt(stk.elementAt(i), low+i);
}
}