下面代码,首先需要清楚的是:
“归并”的含义是将两个或者两个以上的有序表组合称一个新的有序表。归并也是递归的思想,假定待排序表含有n个记录,则可以看成是n个有序的子表,每个子表的长度为1,然后俩俩归并,得到长度为2的有序片段,然后再次将有序的两个长度为2的片段进行归并,变为长度为4的有序的片段.......最后变为长度为n的有序表。
代码如下:
public class MergeSort {
public static void main(String[] args) {
int[] nums={9,8,7,6,5,4,3,2,1};
sort(nums,0,nums.length-1);
for(int num:nums){
System.out.print(num+" ");
}
}
public static void sort(int[]arr,int low,int high){
if(low<high){
int mid=(low+high)/2;
sort(arr,low,mid);//左边有序
sort(arr,mid+1,high);//右边有序
Merge(arr,low,mid,high);//归并操作
}
}
public static void Merge(int []arr,int low,int mid,int high){
int []temp=new int[arr.length];//辅助数组
for(int i=low;i<=high;i++){
temp[i]=arr[i];
}
int i,j,k;
//开始进行归并排序
for( i=low,j=mid+1,k=i;i<=mid&&j<=high;k++){
if(temp[i]>=temp[j]){
arr[k]=temp[j++];
}else{
arr[k]=temp[i++];
}
}
//将尾部数据复制
while(i<=mid){
arr[k++]=temp[i++];
}
while(j<=mid){
arr[k++]=temp[j++];
}
}
}