package Sort;
import java.util.Arrays;
public class MergeSort {
public int[] mergeSort(int[] A ,int n){
int first = 0;
int last = n-1;
process(A,first,last);
return A;
}
//递归调用的分治函数
private void process(int[] a, int first, int last) {
if(first>=last)
return;
int mid = (first+last)/2;
process(a,first,mid); // 左边递归
process(a,mid+1,last); // 右边递归
merge(a,first,mid,last); // 合并
}
//两个有序数组进行合并 ,其实有序的过程应该是在merge函数中实现的。
private void merge(int[] a, int first, int mid, int last) {
int i=first;
int j=mid+1;
int k=0;
int[] temp = new int[last-first+1]; //用来暂时存储中间结果,即将原数组中的元素取出,进行合并后暂时存储在temp中
while(i<=mid&&j<=last){
if(a[i]<a[j]){
temp[k++] = a[i++];
}
else{
temp[k++] = a[j++];
}
}
while(i<=mid){
temp[k++] = a[i++];
}
while(j<=last){
temp[k++] = a[j++];
}
//将排好序的对应部分拷贝到 a 数组中 ,即每次归并时,都改变了原数组A中的数据。
for(int i1=0;i1<temp.length;i1++){
a[first++] = temp[i1];
}
}
public static void main(String[] args) {
int[] a ={2,1,3,8,5,7,4,10};
int[] b = new int[]{};
MergeSort ms = new MergeSort();
b = ms.mergeSort(a, 8);
System.out.println(Arrays.toString(b));
}
}