public static <T extends Comparable<T>> void merge(T[] a, int lo, int mid, int hi) {
	  int i = lo, j = mid+1;
	  for (int k = lo; k <= hi; k++) //Copy elements of array to be merged to auxiliary array.
		  aux[k] = a[k];
	  for (int k = lo; k <= hi; k++) {
		  if (i > mid) 						a[k] = (T) aux[j++];
		  else if (j > hi) 					a[k] = (T) aux[i++];
		  else if (less(aux[j], aux[i])) 	a[k] = (T) aux[j++];
		  else 								a[k] = (T) aux[i++];
	  }
  }