private static <T extends Comparable<? super T>> void mergeSort(T[] source, T[] tmpArray, int left, int middle, int right) {
		int leftEnd = middle - 1;// 左子数组最后一个变量的下标
		int tmpIndex = 0;// 临时数组保存变量的起始位置
		int n = right - left + 1;// 临时数组保存的变量个数
		int leftLow = left;// 本次排序最左下标在源数组中的位置

		// while(left <= leftEnd && middle <= right)
		for (; left <= leftEnd && middle <= right;) {
			if (source[left].compareTo(source[middle]) < 0) {
				tmpArray[tmpIndex++] = source[left++];
			} else {
				tmpArray[tmpIndex++] = source[middle++];

			}
		}

		// 如果左子数组有剩余，那么依次追加到临时数组末尾
		while (left <= leftEnd) {
			tmpArray[tmpIndex++] = source[left++];
		}
		// 如果右子数组有剩余，那么依次追加到临时数组末尾
		while (middle <= right) {
			tmpArray[tmpIndex++] = source[middle++];
		}

		// 将排序后的内容按照次序保存到源数组中
		for (tmpIndex = 0; tmpIndex < n; tmpIndex++) {
			source[leftLow + tmpIndex] = tmpArray[tmpIndex];
		}
	}