ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
```java /** * 归并排序所需的辅助数组。不将其声明为方法内的局部变量,是为了避免重复创建数组 */ private static Comparable[] mergeAux; /** * 归并排序的合并方法 * <pre> * 该方法先将所有元素复制到辅助数组中,再归并回数组a中。 * 在归并时进行了4个条件判断: * - 左半边用尽(取右半边的元素) * - 右半边用尽(取左半边的元素) * - 右半边当前元素小于左半边的当前元素(取右半边的元素) * - 右半边当前元素大于等于左半边的当前元素(取左半边元素) * </pre> * * @param <T> * @param a * @param low * @param middle * @param high */ private static <T extends Comparable> void merge(T[] a, int low, int middle, int high) { int i = low; int j = middle + 1; for (int k = low; k <= high; k++) { mergeAux[k] = a[k]; } for (int k = low; k <= high; k++) { if (i > middle) { a[k] = (T) mergeAux[j++]; } else if (j > high) { a[k] = (T) mergeAux[i++]; } else if (less(mergeAux[j], mergeAux[i])) { a[k] = (T) mergeAux[j++]; } else { a[k] = (T) mergeAux[i++]; } } } ```