合并排序
核心算法(递归算法)
public static void meageSort(Comparable a[], int left, int right) {
Comparable[] b = new Comparable[a.length];
if (left < right) {
int i = (left + right) / 2;
meageSort(a, left, i);
meageSort(a, i + 1, right);
merge(a, b, left, i, right);
copy(a, b, left, right);
}
}
整体代码
package 练习;
import java.util.Arrays;
public class YouHuaSort {
public static void meageSort(Comparable a[], int left, int right) {
Comparable[] b = new Comparable[a.length];
if (left < right) {
int i = (left + right) / 2;
meageSort(a, left, i);
meageSort(a, i + 1, right);
merge(a, b, left, i, right);
copy(a, b, left, right);
}
}
public static void mergePass(Comparable[] x, Comparable[] y, int s) {
int i = 0;
while (i <= x.length - 2 * s) {
merge(x, y, i, i + s - 1, i + 2 * s - 1);
i = i + 2 * s;
}
if (i + s < x.length) {
merge(x, y, i, i + s - 1, x.length - 1);
} else {
for (int j = i; j < x.length; j++) {
y[j] = x[j];
}
}
}
public static void merge(Comparable[] a, Comparable[] b, int m, int n, int r) {
int i = m, j = n + 1, k = m;
while ((i <= n) && (j <= r)) {
while ((i <= n) && (j <= r)) {
if (a[i].compareTo(a[j]) <= 0) {
b[k++] = a[i++];
} else {
b[k++] = a[j++];
}
}
if (i > n) {
for (int q = j; q <= r; q++) {
b[k++] = a[q];
}
} else {
for (int q = i; q <= n; q++) {
b[k++] = a[q];
}
}
}
}
public static void copy(Comparable[] a, Comparable[] b, int m, int r) {
for (int i = m, j = m; i <= r; i++, j++) {
a[i] = b[j];
}
}
public static void main(String[] args) {
Comparable[] a = {4, 8, 3, 7, 1, 5, 2, 6};
System.out.print(Arrays.toString(a));
System.out.println();
meageSort(a, 0, a.length - 1);
System.out.println(Arrays.toString(a));
}
}
输出结果显示:![](https://i-blog.csdnimg.cn/blog_migrate/0ad30c04fea2a2abf2eaf16956927600.png)