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