package MergeSortAlgorithm;
public class MergeSort {
//归并,合并两个数组
public static void merge(int[] data, int start, int center, int end) {
//第一个数组的首位
int i = start;
//第二个数组的首位
int j = center + 1;
//缓存数组
int[] tempArr = new int[end - start + 1];
//缓存数组的小标
int t = 0;
while(i <= center && j <= end) {
if(data[i] < data[j]) {
//边赋值边自加,注意,这里是先赋值,后自加
tempArr[t ++] = data[i ++];
}else {
tempArr[t ++] = data[j ++];
}
}
//将剩余没有加完的,加到缓存数组中
while(i <= center) {
tempArr[t ++] = data[i ++];
}
while(j <= end) {
tempArr[t ++] = data[j ++];
}
//将缓存数组复制到真数组中
for(int k = start; k <= end; k ++) {
data[k] = tempArr[k - start];
}
}
//递归排序
public static void sort(int[] data, int start, int end) {
//初始化条件
if(start >= end) return;
//二分一下区间,然后递归
int center = (start + end) / 2;
sort(data, start, center);
sort(data, center + 1, end);
//合并两个排好序的数组
merge(data, start, center, end);
}
//展示
public static void display(int[] data) {
sort(data, 0, data.length - 1);
System.out.println("归并排序后的数组为:");
for(int obj : data) {
System.out.print(obj + "\t");
}
}
public static void main(String[] args) {
int[] data = {2,4,3,8,7,9,11,52,13,46,88,0,4,9,56,7};
display(data);
}
}
结果截图:
归并排序后的数组为:
0 2 3 4 4 7 7 8 9 9 11 13 46 52 56 88