package org.example.algorithm;
import java.util.Arrays;
public class mergeSort {
// 归并
public static void merge(int[] a, int low, int mid,int high){
int[] tmp = new int[high - low + 1]; //创建临时数组存储排序好的数字
int i = low;
int j = mid+1;
int k = 0;
while (i <= mid && j <= high){ //从小到大排序
if(a[i]<= a[j]){
tmp[k++] = a[i++];
}
else {
tmp[k++] = a[j++];
}
}
//剩余未排序完的数字直接拼接到数组后
while (i <= mid){
tmp[k++]=a[i++];
}
while (j <= high){
tmp[k++]=a[j++];
}
//返回排序好的数组,即用数组tmp覆盖数组a
for (int l = 0; l < tmp.length; l++) {
a[l+low]=tmp[l];
}
}
//归并排序
public static void mergeSort(int[] a, int low, int high) {
int mid=(high+low)/2;
if (low<high){
mergeSort(a,low,mid);
mergeSort(a,mid+1,high);
merge(a,low,mid,high);
System.out.println(Arrays.toString(a));
}
}
public static void main(String[] args) {
int a[] = { 51, 46, 20, 18, 65, 97, 82, 30, 77, 50 };
mergeSort(a, 0, a.length - 1);
System.out.println("排序结果:" + Arrays.toString(a));
}
}