private void mergeWithoutSentinelNode(int[] a, int p, int q, int r) {
		int[] L = new int[q - p + 1];
		int[] R = new int[r - q];
		for (int i = 0; i < L.length; i++) {
			L[i] = a[p + i];
		}
		for (int i = 0; i < R.length; i++) {
			R[i] = a[q + i + 1];
		}
		int i = 0;
		int j = 0;
		int k = p;
		while (i < L.length && j < R.length) {
			if (L[i] < R[j])
				a[k++] = L[i++];
			else
				a[k++] = R[j++];
		}
		while (i < L.length) {
			a[k++] = L[i++];
		}
		while (j < R.length) {
			a[k++] = R[j++];
		}
	}