public static void mergeSort(int[] arr, int l, int r) {
if (r <= l) return;
int m = (l + r) / 2;
//分别对左右两组排序
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
//合并
merge(arr, l, r);
}
static void merge(int[] arr, int l, int r) {
int m = (l + r) / 2;
int[] tmp = new int[r - l + 1];
int i = l, j = m + 1, k = 0;
while (i <= m && j <= r)
tmp[k ++] = arr[i] <= arr[j] ? arr[i ++] : arr[j ++];
while (i <= m) tmp[k ++] = arr[i ++];
while (j <= r) tmp[k ++] = arr[j ++];
for (i = l, k = 0; i <= r; ++i, ++k)
arr[i] = tmp[k];
}
【排序算法】归并排序 Java实现
最新推荐文章于 2024-10-01 04:50:10 发布