Java归并排序模板
归并排序模板,简洁、好记。
private void mergeSort(int[] a, int i, int j) {
if (i < j) {
int mid = (i + j) >> 1, l = i, r = mid + 1, t = 0; // 中指针、左指针、右指针、temp数组指针
int[] temp = new int[j - i + 1]; // 用于存放中间结果的临时数组
// 先分别递归排序左边和右边的子数组
mergeSort(a, i, mid);
mergeSort(a, mid + 1, j);
// 合并已经排好序的左右两个子数组
while (l <= mid && r <= j) {
if (a[l] <= a[r]) temp[t++] = a[l++];
else temp[t++] = a[r++];
}
// 把没用完的尾巴连上
while (l <= mid) temp[t++] = a[l++];
while (r <= j) temp[t++] = a[r++];
// 把临时数组中的合并结果复制到原数组中
System.arraycopy(temp, 0, a, i, temp.length);
}
}