package sun;
public class Sort {
private static void sort(int[] array, int i, int j) {
if (i < j) {
int middle = (i + j) / 2;
// 递归处理相关的合并事项
sort(array, i, middle);
sort(array, middle + 1, j);
merge(array, i, middle, j);
}
}
private static void merge(int[] array, int i, int middle, int j) {
// 创建一个临时数组用来存储合并后的数据
int[] temp = new int[array.length];
int m = i;
int n = middle + 1;
int k = i;
while (m <= middle && n <= j) {
if (array[m] < array[n])
temp[k++] = array[m++];
else
temp[k++] = array[n++];
}
// 处理剩余未合并的部分
while (m <= middle) {
temp[k++] = array[m++];
}
while (n <= j) {
temp[k++] = array[n++];
}
// 将临时数组中的内容存储到原数组中
while (i <= j) {
array[i] = temp[i++];
}
}
public static void main(String[] args) {
int[] arr = { 49, 38, 65, 97, 76, 13, 27, 49 };
sort(arr, 0, arr.length - 1);
for (int a : arr)
System.out.println(a);
}
}
二路归并排序
最新推荐文章于 2020-09-05 18:04:36 发布