import java.util.Arrays;
public class MergeSort {
public static void merge(int[] a, int p, int q, int r) {
int i, j, k, n1, n2;
n1 = q - p + 1;
n2 = r - q;
int[] L = new int[n1];
int[] R = new int[n2];
for (i = 0, k = p; i < n1; i++, k++)
L[i] = a[k];
for (i = 0, k = q + 1; i < n2; i++, k++)
R[i] = a[k];
for (k = p, i = 0, j = 0; i < n1 && j < n2; k++) {
if (L[i] > R[j]) {
a[k] = L[i];
i++;
} else {
a[k] = R[j];
j++;
}
}
if (i < n1) {
for (j = i; j < n1; j++, k++) {
a[k] = L[j];
}
}
if (j < n2) {
for (i = j; i < n2; i++, k++) {
a[k] = R[i];
}
}
}
public static void mergeSort(int[] a, int p, int r) {
if (p < r) {
int q = (p + r) / 2;
mergeSort(a, p, q);
mergeSort(a, q + 1, r);
merge(a, p, q, r);
}
}
public static void main(String[] args) {
int[] a = {5, 4, 9, 8, 6, 0, 1, 3, 2};
int len = a.length;
mergeSort(a, 0, len - 1);
System.out.println(Arrays.toString(a));
}
}
【Java】归并排序
于 2022-07-19 15:33:48 首次发布
这篇博客详细介绍了Java实现归并排序的过程,包括`mergeSort`和`merge`两个关键方法。通过递归将数组分成两半,然后合并排序后的子数组,实现了数组的排序。示例代码中展示了如何对一个整数数组进行归并排序,并在最后打印出排序后的结果。
摘要由CSDN通过智能技术生成