1、将记录序列R[1..n]看成是n个长度为1的子序列,然后两两归并,得到┏n/2┓个长度为2或1的有序子序列。再两两归并,重复此过程,直至得到一个长度为n的有序序列为止。这种方法每次都将两个序列合并成一个序列,故称为2路归并排序。
2、代码
package mergesort;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args){
int[] data= {49, 38, 65, 97, 76, 13,27};
System.out.println(Arrays.toString(data));
MergeSort(data,0 ,data.length-1);
System.out.println(Arrays.toString(data));
};
public static void MergeSort(int[] data,int low ,int high){
int mid=(low+high)/2;
if(low<high){
MergeSort(data,low,mid);
MergeSort(data,mid+1,high);
Merge(data,low,mid,high);
}
}
public static void Merge(int[] data, int low, int mid, int high) {
// TODO Auto-generated method stub
int[] tmp=new int[high-low+1];
int i=low,j=mid+1,k=0;
for(;i<=mid&&j<=high;){
if(data[j]<data[i]) tmp[k++]=data[j++];
else {tmp[k++]=data[i++];}
}
while(i<=mid){
tmp[k++]=data[i++];
}
while(j<=high){
tmp[k++]=data[j++];
}
//将tmp值覆盖给data
for(int t=low,x=0;t<=high;x++,t++) {
data[t]=tmp[x];
}
}
}
3、运行结果
[49, 38, 65, 97, 76, 13, 27]
[13, 27, 38, 49, 65, 76, 97]