private void sort(T[] a, T[] aux, int lo, int hi) { // Sort a[lo..hi].
		if (hi <= lo)
			return;
		int mid = lo + (hi - lo) / 2;
		sort(a, aux, lo, mid); // Sort left half.
		sort(a, aux, mid + 1, hi); // Sort right half.
		merge(a, aux, lo, mid, hi); // Merge results (code on page 271).
	}