private void merge(int[] a, int lo, int mid, int hi) {
		int[] temp = new int[hi - lo + 1];
		for (int i = 0; i < hi - lo + 1; i++) {
			temp[i] = a[lo + i];
		}
		
		int ii = lo, jj = mid + 1;
		for (int i = 0; i < hi - lo + 1; i++) {
			if (ii > mid) a[i + lo] = temp[jj++ - lo];
			else if (jj > hi) a[i + lo] = temp[ii++ - lo];
			else {
				if (temp[ii - lo] > temp[jj - lo]) {
					a[i + lo] = temp[jj++ - lo];
				}
				else {
					a[i + lo] = temp[ii++ - lo];
				}
			}
		}
	}