package cn.shu.test.sort;
public class MergeSort {
//程序入口
public static void main(String[] args) {
int[] a = {5,9,12,7,36,81,94,45,69};
for(int i=0; i<a.length; i++){
System.out.print(a[i]+" ");
}
int n = a.length;
int[] p = new int[n];
recursionSort(a,0,n-1,p);
/*for(int i=0; i<n; i++){
System.out.println(p[i]);
}*/
System.out.println("\n归并排序后==================归并排序后");
for(int i=0; i<n; i++){
System.out.print(a[i]+" ");
}
}
//递归分解部分
private static void recursionSort(int[] a, int start, int end, int[] p) {
int mid = (start+end)/2;
if(start<end){
recursionSort(a, start, mid, p); //左边有序
recursionSort(a, mid+1, end, p); //右边有序
mergeSort(a,start,mid,end,p);
}
}
//归并部分
private static void mergeSort(int[] a, int start, int mid, int end,
int[] p) {
int i=start,j=mid+1,k=0;
while(i<=mid && j<=end){
if(a[i]<a[j]){
p[k++] = a[i++];
}else{
p[k++] = a[j++];
}
}
while(i<=mid){
p[k++] = a[i++];
}
while(j<=end){
p[k++] = a[j++];
}
for(int m=0; m<k; m++){
//注意:使用a[m] = p[m];出现排序错误,因为start对应排序的起始位置
a[start+m] = p[m];
}
}
}
归并排序(JAVA)
最新推荐文章于 2025-01-26 22:38:58 发布