private static void merge(int[] data, int[] tmp, int low, int middle,
			int high) {
		int i = low, j = middle + 1, k = low;
		while (i <= middle && j <= high) {
			if (data[i] < data[j]) {
				tmp[k++] = data[i++];
			} else {
				tmp[k++] = data[j++];
			}
		}
		while (i <= middle) {
			tmp[k++] = data[i++];
		}
		while (j <= high) {
			tmp[k++] = data[j++];
		}
		System.arraycopy(tmp, low, data, low, high - low + 1);
	}