多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
```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++]; } } } ```