public class Main {
public static void main(String[] args) {
int[] arr = {4,3,2,5};
int[] tmp = new int[arr.length]; //新建一个临时数组存放
mergeSort(arr,0,arr.length-1,tmp);
for(int i=0;i<arr.length;i++){
System.out.print(tmp[i]+" ");
}
}
public static void merge(int[] arr,int low,int mid,int high,int[] tmp){
int i = low;
int j = mid+1;
int k = low;
while(i<=mid && j<=high) { //前后两段都是排序好的
if(arr[i]<=arr[j]) {
tmp[k] = arr[i];
i++;
} else {
tmp[k] = arr[j];
j++;
}
k++;
}
while(i<=mid) {
tmp[k] = arr[i];
k++;
i++;
}
while(j<=high) {
tmp[j] = arr[j];
k++;
j++;
}
}
public static void mergeSort(int[] arr,int low,int high,int[] tmp){
int[] t = new int[arr.length]; //开辟一个数组做中间空间
if(low == high) {
tmp[low] = arr[low];
} else {
int mid = (low+high)/2;
mergeSort(arr,low,mid,t); //对左边序列进行归并排序
mergeSort(arr,mid+1,high,t); //对右边序列进行归并排序
merge(t,low,mid,high,tmp); //合并两个有序序列
}
}
}
归并排序java
最新推荐文章于 2024-07-04 09:24:51 发布