public static void merge(double[] input, int lo, int mid, int hi) {
		// Must use auxilliary array. In-place merge is a lot harder. See book.
		double[] aux = new double[hi - lo];
		
		// Merge into aux
		int i = lo;
		int j = mid;
		for (int m = 0; m < aux.length; m++) {
			if (i >= mid) {
				aux[m] = input[j++];
			} else if (j >= hi) {
				aux[m] = input[i++];
			} else if (Helper.less(input, i, j)) {
				aux[m] = input[i++];
			} else {
				aux[m] = input[j++];
			}
		}
		
		// Copy back
		for (int m = 0; m < aux.length; m++) {
			input[m + lo] = aux[m];
			Helper.exch(input, m + lo, m + lo); // Hack to draw the copy process
		}
	}